Certificats SSL wildcard avec Let’s Encrypt

J’ai déjà fait plusieurs articles sur Let’s Encrypt (voir ici), je vais donc partir du principe que vous savez ce que c’est.
Si j’en reparle, c’est parce que Let’s Encrypt permet maintenant (depuis plusieurs mois en fait) de générer des certificats wildcard. Les wildcard sont des certificats qui sont valables pour l’ensemble des sous-domaines.
Avant, avec Let’s Encrypt, il fallait lister tous les sous-domaines lors de la création du certificat SSL. Du coup si on créait un nouveau sous-domaine 3 jours après avoir généré le certificat SSL il fallait le regénérer en incluant le nouveau sous-domaine. Avec les certificats wildcard, plus besoin.

Pour vérifier que le nom de domaine pour lequel vous souhaitez générer un certificat vous appartient, Let’s Encrypt propose 2 types de challenges :

  • http-01 : il envoi une requête http
  • dns-01 : il demande la création d’un enregistrement TXT sur la zone du domaine

Dans mes précédents articles, j’utilisais le challenge http-01, le plus simple à mettre en place. Mais pour les certificats wildcard, seul le challenge dns-01 est accepté. Avant de suivre cet article, il faut donc impérativement que vous ayez suivi cet article sur la mise en place de dns dynamique. Seuls les chapitres 1 et 2 de cet articles, qui traitent de la création de la clé et de la configuration de Bind, sont indispensable. L’autre partie traite de la mise à jour de l’adresse ip, qui n’est pas utile pour les wildcard.
Par contre, il nous vous faudra pas utiliser « update-policy »comme indiqué au début du chapitre 2, mais « allow-update » comme indiqué à la fin du chapitre 2 (que vous utilisez ISPConfig ou non).

Je ne traiterai dans cet article que le cas du serveur DNS auto-hébergé, dans mon cas Bind. Certbot possède d’autres plugins permettant de compléter le challenge dns-01 dans le cas où votre dns est gérer par ovh, ghandi, etc, mais je ne les ai jamais testés.

1) Installation de Certbot

Comme dans les articles précédents, on va utiliser Certbot, le client officiel de Let’s Encrypt. Pour les wildcard, il va nous falloir installer la version présente dans les dépôts backports de Debian. Pour ajouter ces dépôts, ouvrez le fichier /etc/apt/sources.list et ajoutez la ligne deb http://ftp.debian.org/debian stretch-backports main. Enregistrez puis lancez la commande sudo aptitude update pour mettre à jour les dépôts.

On va maintenant pouvoir installer Certbot. Lancez la commande sudo aptitude install certbot -t stretch-backports. Il va également nous falloir un plugin pour mettre à jour notre zone DNS. Pour ce faire, lancez la commande sudo aptitude install python3-certbot-dns-rfc2136.

Maintenant que nous avons tout ce qu’il nous faut, passons à la création.

2) Création d’un certificat wildcard

Commencez par créer un fichier ini, lets_encrypt.ini par exemple (vous pouvez l’appeler comme vous voulez). Voici ce qu’il doit y avoir dedans :

authenticator = dns-rfc2136
renew-by-default = True
agree-tos=true
email = toto@memodugeek.info
domains=memodugeek.info,*.memodugeek.info
rsa-key-size = 4096
server = https://acme-v02.api.letsencrypt.org/directory
dns-rfc2136-credentials = /root/dns.ini

Expliquons toutes ces lignes :

  • authenticator = dns-rfc2136 -> indique qu’on va utiliser le plugin dns-rfc2136. Il utilisera automatiquement le challenge dns-01 également
  • renew-by-default = True -> accepte automatiquement le renouvellement du certificat
  • agree-tos=true -> accepte automatiquement les conditions d’utilisation
  • email = toto@memodugeek.info -> indique l’adresse mail sur laquelle sera envoyé les mails d’information de renouvellement
  • rsa-key-size = 4096 -> force la création d’un certificat avec une clé 4096 bits (2048 bits par défaut)
  • server = https://acme-v02.api.letsencrypt.org/directory -> force l’utilisation de la dernière API de Let’s Encrypt nécessaire aux wildcard
  • dns-rfc2136-credentials = /root/dns.ini -> indique le chemin du fichier ini du plugin dns-rfc2136

Et voici ce que doit contenir le fichier dns.ini (pareil, vous pouvez l’appeler comme vous voulez) :

# Target DNS server
dns_rfc2136_server = IP du serveur DNS
# Target DNS port
dns_rfc2136_port = 53
# TSIG key name
dns_rfc2136_name = nom de la clé
# TSIG key secret
dns_rfc2136_secret = contenu de la clé
# TSIG key algorithm
dns_rfc2136_algorithm = HMAC-SHA512

Si votre serveur DNS et votre serveur web (Apache ou Nginx) sont sur le même serveur, il vous faudra mettre 127.0.0.1 pour l’IP.
Le nom de clé correspond au nom que vous avez donné à la clé dans le fichier named.conf.keys.
Le contenu correspond au code secret de la clé.
Si vous avez utilisé un algorithme autre que le HMAC-SHA512, pensez à modifier cette partie.

Comme ce fichier ini contient le code secret de la clé, chose assez sensible, on va modifier les droits de ce fichier. Tapez la commande chmod 600 dns.ini. Comme j’ai mis la clé dans le home de l’utilisateur root, lui seul pourra lire ce fichier.

Il ne reste plus qu’à générer notre certificat avec la commande certbot certonly --config /root/lets_encrypt.ini. Pensez à modifier l’emplacement du fichier ini si vous ne l’avez pas mis dans le home de l’utilisateur root.

Les certificats vont être créés dans le répertoire /etc/letsencrypt/live/nomdedomaine/. Pensez à modifiez vos fichier Apache pour indiquer le certificat.
C’est expliquer dans le chapitre 3 de cet article.

Et pour le renouvellement automatique, il suffit de faire comme expliquer dans cet article et changer les lignes

systemctl stop apache2.service
/home/fate/certbot/certbot-auto certonly --config /home/fate/lets_encrypt.ini
systemctl start apache2.service

par

certbot certonly --config /root/lets_encrypt.ini 
systemctl restart apache2

Pensez à modifier le chemin du fichier ini si besoin.

Une réponse pour “Certificats SSL wildcard avec Let’s Encrypt”

  1. Ping : Let's Encrypt, Certbot et SSL sur Debian 8

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.