Postulat : On veut créer un certificat wildcard *.domain.tld avec letsencrypt. On a un serveur bind autoritaire sous la main, en local sur la machine.
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST letsencrypt
6kB<bla bla pleins de trucs>aCA==
dns_rfc2136_server = 127.0.0.1 dns_rfc2136_name = letsencrypt dns_rfc2136_secret = 6kB<bla bla pleins de trucs>aCA== dns_rfc2136_algorithm = HMAC-SHA512
key "letsencrypt" { algorithm hmac-sha512; secret "6kB<bla bla pleins de trucs>aCA=="; };
zone "domain.tld" in { type master; file "domain.tld.named"; ... ... check-names ignore; update-policy { grant letsencrypt name _acme-challenge.domain.tld. txt; }; };
service bind9 restart
_acme-challenge
_acme-challenge
en txt
avec la clé letsencrypt
Ici, on souhaite générer un certificat pour *.domain.tld mais également pour domain.tld, car il n'est pas compris par défaut dans le wildcard !
On teste une première génération en dry-run :
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --dns-rfc2136-propagation-seconds 130 --preferred-challenges=dns --email=letsencrypt@domain.tld --agree-tos -d *.domain.tld -d domain.tld --dry-run
Attention : Le fichier de zone étant modifié directement par bind pour ajouter puis retirer l'enregistrement TXT, il a tendance a mettre le bazar dans la syntaxe du fichier ! Pensez à faire une sauvegarde de votre zone “propre” avant de lancer ces commandes
Ce qui devrait donner à peu près ça :
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /usr/local/etc/letsencrypt/renewal/domain.tld.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator dns-rfc2136, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for domain.tld Waiting 5 seconds for DNS changes to propagate Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed without reload, fullchain is /usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /usr/local/etc/letsencrypt/live/domain.tld.com/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Même commande que précédemment, mais sans le dry-run :
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --dns-rfc2136-propagation-seconds 130 --preferred-challenges=dns --email=letsencrypt@domain.tld --agree-tos -d *.domain.tld -d domain.tld
Si tout se passe bien, vous aurez généré votre certificat wildcard !
Penser à désactiver les crons systemd de certbot si besoin !
Pas la peine de reprendre toutes les options, en cas de renew :
00 13 * * * /usr/bin/certbot renew --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --dns-rfc2136-propagation-seconds 120