La version de production du server ACMEv2 de Let’s Encrypt est disponible depuis plusieurs semaines et il permet d’obtenir et d’installer des certificats SSL Wildcard pour sécuriser un domaine, ainsi que tous ses sous-domaine. Cela peut s’avérer particulièrement intéressant si vous héberger plusieurs sites sur des sous-domaines ou une instance WordPress Multi-sites.
Installer Acme.sh
Acme.sh s’installe facilement avec la commande suivante :
wget -O - https://get.acme.sh | sh
Après l’installation, vous pouvez utiliser la commande source ~/.bashrc
ou fermer puis ré-ouvrir votre session pour activer l’auto-complétion.
Obtenir un certificat SSL Let’s Encrypt Wildcard
Validation DNS manuelle
Les certificats SSL Wildcards de Let’s Encrypt supportent uniquement la validation avec un enregistrement DNS, en mode manuel il est donc nécessaire de lancer acme.sh, puis de copier/coller l’enregistrement affiché et d’ajouter un enregistrement DNS.
Attention, le mode « validation DNS manuelle » ne supporte pas le renouvellement automatique du certificat, son utilisation n’est pas recommandée en production comme l’indique la documentation acme.sh
La commande pour générer un certificat SSL Wildcard avec Acme.sh en mode DNS manuel est la suivante :
acme.sh --issue -d votredomaine.tld -d *.votredomaine.tld --dns
Mais s’agissant d’un mode de validation dont le renouvellement n’est pas automatique, il vous faudra ajouter l’argument --yes-I-know-dns-manual-mode-enough-go-ahead-please
pour confirmer qu’il s’agit bien du mode de validation souhaité et que vous connaissez son fonctionnement.
Vous pouvez également définir d’autres options, comme le type de certificat ou la taille de la clé privée. Par exemple pour un certificat ECDSA avec un clé privée de 384 bits, la commande sera :
acme.sh --issue -d votredomaine.tld -d *.votredomaine.tld --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --keylength ec-384
Acme.sh va générer la votre clé privée, ainsi que le CSR puis vous afficher les deux enregistrements DNS à ajouter :
root@root:~# acme.sh --issue -d votredomaine.tld -d *.votredomaine.tld --dns --keylength ec-384 --yes-I-know-dns-manual-mode-enough-go-ahead-please
[lundi 19 mars 2018, 14:23:22 (UTC+0100)] Domains have changed.
[lundi 19 mars 2018, 14:23:22 (UTC+0100)] Multi domain='DNS:votredomaine.tld,DNS:*.votredomaine.tld'
[lundi 19 mars 2018, 14:23:23 (UTC+0100)] Getting domain auth token for each domain
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Getting webroot for domain='votredomaine.tld'
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Getting webroot for domain='*.votredomaine.tld'
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Add the following TXT record:
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Domain: '_acme-challenge.votredomaine.tld'
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] TXT value: 'TkcYtkbkvagdGG78YzLEdJF_JkV9GXtH8x-9f6nsM'
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Please be aware that you prepend _acme-challenge. before your domain
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] so the resulting subdomain will be: _acme-challenge.votredomaine.tld
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Add the following TXT record:
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Domain: '_acme-challenge.votredomaine.tld'
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] TXT value: '39boLncIG-2GWXx4GG8f6kgzDZAQrk_F7FwohnTE3Zo'
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Please be aware that you prepend _acme-challenge. before your domain
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] so the resulting subdomain will be: _acme-challenge.votredomaine.tld
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Please add the TXT records to the domains, and re-run with --renew.
[lundi 19 mars 2018, 14:23:24 (UTC+0100)] Please check log file for more details: /root/.acme.sh/acme.sh.log
Ajoutez vous 2 enregistrements :
Enregistrement TXT
_acme-challenge.votredomaine.tld IN TXT 39boLncIG-2GWXx4GG8f6kgzDZAQrk_F7FwohnTE3Zo
_acme-challenge.votredomaine.tld IN TXT TkcYtkbkvagdGG78YzLEdJF_JkV9GXtH8x-9f6nsM
Lors que vous aurez ajouté les deux enregistrements DNS sur votre domaine, vous pouvez lancer la phase de validation avec la commande :
acme.sh --renew -d votredomaine.tld --ecc --yes-I-know-dns-manual-mode-enough-go-ahead-please
L’option --ecc
est nécessaire uniquement si vous avez généré une clé privée ECC.
Si le challenge ACME est validé, Acme.sh vous affichera l’emplacement dans lequel est stocké votre certificat SSL et votre clé privée :
root@root:~# acme.sh --renew --ecc -d votredomaine.tld --yes-I-know-dns-manual-mode-enough-go-ahead-please
[lundi 19 mars 2018, 14:27:45 (UTC+0100)] Renew: 'votredomaine.tld'
[lundi 19 mars 2018, 14:27:45 (UTC+0100)] Skip, Next renewal time is: mardi 1 mai 2018, 11:54:03 (UTC+0000)
[lundi 19 mars 2018, 14:27:45 (UTC+0100)] Add '--force' to force to renew.
root@nginx:~# acme.sh --renew --ecc -d votredomaine.tld --force
[lundi 19 mars 2018, 14:27:59 (UTC+0100)] Renew: 'votredomaine.tld'
[lundi 19 mars 2018, 14:28:00 (UTC+0100)] Multi domain='DNS:votredomaine.tld,DNS:*.votredomaine.tld'
[lundi 19 mars 2018, 14:28:00 (UTC+0100)] Getting domain auth token for each domain
[lundi 19 mars 2018, 14:28:00 (UTC+0100)] Verifying:votredomaine.tld
[lundi 19 mars 2018, 14:28:03 (UTC+0100)] Success
[lundi 19 mars 2018, 14:28:03 (UTC+0100)] Verifying:*.votredomaine.tld
[lundi 19 mars 2018, 14:28:06 (UTC+0100)] Success
[lundi 19 mars 2018, 14:28:06 (UTC+0100)] Verify finished, start to sign.
[lundi 19 mars 2018, 14:28:08 (UTC+0100)] Cert success.
[lundi 19 mars 2018, 14:28:08 (UTC+0100)] Your cert is in /root/.acme.sh/certs/votredomaine.tld_ecc/votredomaine.tld.cer
[lundi 19 mars 2018, 14:28:08 (UTC+0100)] Your cert key is in /root/.acme.sh/certs/votredomaine.tld_ecc/votredomaine.tld.key
[lundi 19 mars 2018, 14:28:08 (UTC+0100)] The intermediate CA cert is in /root/.acme.sh/certs/votredomaine.tld_ecc/ca.cer
[lundi 19 mars 2018, 14:28:08 (UTC+0100)] And the full chain certs is there: /root/.acme.sh/certs/votredomaine.tld_ecc/fullchain.cer
Une fois terminé, vous pouvez mettre à jour votre fichier vhost comme d’habitude avec les clés fournis par ACME.
Sachez qu’il est possible de passer par les API des grands fournisseurs de domaine, tel que Cloudflare, DigitalOcean, OVH ou AWS Route 53. Voir leurs référenciels pour utiliser leurs API.
Sinon montez votre propre serveur DNS et scriptez pour l’ajout automatique des champs txt lors du renouvellement.
Sources