- Modifié
Ça fait un moment que je cherche à comprendre comment créer un certificat Wildcard, la difficulté étant d'insérer un enregistrement DNS de type TXT (_acme-challenge.example.com) au fichier de zone afin que Letsencrypt accepte de créer ou renouveler les certificats.
C'est ce que je vais détailler dans ce tuto avec quelques bonus en sus, comme l’automatisation de la rotation des enregistrements TLSA, des clés DNSSEC ainsi que des notifications slack afin de recevoir les alertes sur votre téléphone .. pratique pour être tenu informer.
Pré requis :
Avoir un domaine chez Gandi
Ce tuto ne s'adresse qu'aux personnes ayant installé le DNS autoritaire avec NSD/DNSSEC via Docker.
https://blog.meshup.net/deploy-nsd-dnssec-with-docker/
Sources :
https://kostikov.co/pereezzhaem-na-wildcard-sertifikaty-lets-encrypt
https://mondedie.fr/d/10347-script-python-ajout-automatique-fingerprint-chez-gandi-nsd-dnssec-via-docker/2
L'idée est d'utiliser la dernière version de certbot qui grâce à ces commandes "--manual-auth-hook", "--manual-cleanup-hook", "--post-hook" et l'aide de scripts va nous permettre :
L'insertion de l'enregistrement acme dans le fichier de zone NSD
La création de certificats Wildcard
La mise à jour automatiques des enregistrements TLSA
La rotation des clés DNSSEC
La signature de la zone SOA
Mise à jour de la zone DNS et signature avec DNSSEC
Mise à jour automatique du fingerprint chez GANDI
Le café et les petits fours!!
Également un script proposé par @Hardware pour renouveler automatiquement les enregistrements TLSA dont on ne parle pas assez sur le forum mais qui permettent de prouver l'authenticité de l'émetteur du certificat, et donc de certifier que la connexion sécurisée vers le serveur est bien chiffrée et n'est pas détournée. La condition pour son utilisation est l'activation de DNSSEC, sans quoi DANE n'a aucun intérêt.
https://blog.meshup.net/securiser-lacces-a-son-site-internet-avec-le-protocole-dane/
https://mondedie.fr/d/10307-certificat-classique-ou-wildcard/19
J'ai légèrement modifié les scripts de @Hardware pour les rendre compatibles avec ce tuto, du coup j'ai déposé les versions modifiées sur mon github avec une mention pour préciser le nom de l'auteur.
le fichier de zone doit impérativement se présenter sous cette forme :
_dane IN TLSA 3 0 1 ebfba90af284b3e1ba951a15455ff8788b0314e44c3da1a0a7b62596aabb73e4
# Port 443, enregistrements DANE pour mondedie.fr et webmail.mondedie.fr
_443._tcp IN CNAME _dane
_443._tcp.webmail IN CNAME _dane
# Port 25, enregistrements DANE pour mail.mondedie.fr
_25._tcp.mail IN CNAME _dane
Installation de Certbot debian 9
echo "deb http://ftp.debian.org/debian stretch-backports main" >> /etc/apt/sources.list
apt update
apt-get install python-certbot-nginx -t stretch-backports
On récupère ensuite les fichiers du git
cd /tmp
wget https://github.com/laster13/dnstools/archive/master.zip
unzip master.zip
cd dnstools-master
mv *.* /usr/local/bin
cd /usr/local/bin
chmod +x leadd.sh ledel.sh update-mail-tlsa update-tlsa dnssec.py dnsnewserial.sh
Création des certificats
root@mail:#certbot certonly --manual --preferred-challenges=dns --manual-auth-hook leadd.sh --manual-cleanup-hook ledel.sh --renew-hook "service nginx reload" --post-hook "update-mail-tlsa && python /usr/local/bin/dnssec.py" --manual-public-ip-logging-ok --agree-tos --email admin@example.com --cert-name example.com -d example.com -d "*.example.com" --server https://acme-v02.api.letsencrypt.org/directory
Déroulé du script
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for example.com
dns-01 challenge for example.com
Waiting for verification...
Cleaning up challenges
Running deploy-hook command: service nginx reload
Running post-hook command: update-mail-tlsa && python /usr/local/bin/dnssec.py
Output from update-mail-tlsa:
sending incremental file list
README
cert.pem
chain.pem
fullchain.pem
privkey.pem
sent 12,638 bytes received 111 bytes 25,498.00 bytes/sec
total size is 12,272 speedup is 0.96
mailserver
Generating ZSK & KSK keys for 'example.com'
Signing zone for example.com
NSD configuration rebuild... reconfig start, read /etc/nsd/nsd.conf
ok
Reloading zone for example.com... ok
Notify slave servers... ok
Done.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-10-04. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
On peut vérifier les options de renouvellement automatique
cat /etc/letsencrypt/renewal/example.com.conf
# renew_before_expiry = 30 days
version = 0.25.0
archive_dir = /etc/letsencrypt/archive/example.com
cert = /etc/letsencrypt/live/example.com/cert.pem
privkey = /etc/letsencrypt/live/example.com/privkey.pem
chain = /etc/letsencrypt/live/example.com/chain.pem
fullchain = /etc/letsencrypt/live/example.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
installer = None
manual_cleanup_hook = ledel.sh
authenticator = manual
manual_public_ip_logging_ok = True
pref_challs = dns-01,
account = fd7a3565aba701b20177683bec4b63ef
server = https://acme-v02.api.letsencrypt.org/directory
manual_auth_hook = leadd.sh
rsa_key_size = 4096
post_hook = update-mail-tlsa && python /usr/local/bin/dnssec.py
renew_hook = service nginx reload
Si vous n'avez pas installé le mailserver de @Hardware, supprimez ces lignes dans le fichier 'update-mail-tlsa
# Mise à jour des certificats du serveur mail
rsync -Lvr "${LETS_ENCRYPT_LIVE_PATH}/" "/mnt/docker/ssl/live/mail.${DOMAIN}"
# Redémarrage du serveur mail suite au renouvellement des certificats
docker restart mailserver
Enfin on mettra en place un cron pour le renouvellement des certificats
0 3 * * 0 root certbot renew >/dev/null 2>&1
Vous pouvez vérifier votre configuration DNS avec les sites suivants
http://dnsviz.net/
http://dnssec-debugger.verisignlabs.com/
https://dane.sys4.de/
https://www.ssllabs.com/ssltest/