Certificats wildcard chez LetsEncrypt
LetsEncrypt est un fournisseur de certificats SSL qui gagne à être connu. Ils fournissent gratuitement des certificats à tous ceux qui en font la demande.
Leur système de vérification automatisé offre plusieurs solutions pour prouver que vous disposer bien du nom de domaine pour lequel vous voulez votre certificat.
Du fichier à ajouter dans votre hébergement au pointeur DNS ajouté dans la zone.
Mais dans le cas qui nous intéresse, seule la validation par le serveur DNS est possible. Car il vous faudra prouver que vous avez un contrôle total sur la zone DNS pour obtenir un certificat qui soit valable pour n'importe quel hôte du domaine.
Cet article ne traite que la validation via un DNS que vous administrez. |
Les certificats wildcard
Pour commencer un petit rappel.
Les certificats utilisés pour les connexions SSL utilisent la norme X.509. Chaque certificat doit comporter un certain nombre d'informations et est signé par une autorité de certification.
Si cette autorité est reconnue comme fiable, alors tous les certificats qu'elle signera le seront aussi. Il est donc nécessaire pour une autorité de s'assurer de la fiabilité des données présentes dans les certificats.
La donnée la plus importante est le nom. En effet chaque certificat vient certifier d'une identité. Mais il est possible pour un certificat de valider plusieurs identités, ce qui est très utile quand un serveur héberge plusieurs sites. Car souvent le certificat est envoyé avant que le serveur sache quel site est demandé.
Alors pour simplifier les choses, des certificats capables de certifier tous les hôtes d'un domaine ont étés mis en place.
Prenons l'exemple de ce wiki:
Le certificat est fourni pour le nom de domaine adadov.net.
Et dans les options du certificats, on trouve l'information qu'il peut aussi servir pour *.adadov.net.
Ce certificat est donc valable pour tous les sites présents sur le domaine adadov.net.
Configurer les utilitaires
Comme dit plus tôt, LetsEncrypt a automatisé la validation. Mais ils ont aussi développé un utilitaire (bon il en existe d'autres aussi) qui permet d'obtenir un certificat en seulement quelques minutes.
Cet utilitaire c'est certbot.
Par défaut certbot utilise la validation via un fichier dans l'espace d'hébergement. Mais pour les wildcard, ce n'est pas suffisant de prouver qu'on a accès à un hôte. Sinon on pourrait facilement obtenir des certificats pour des domaines qui hébergent des pages et détourner leurs services ...
Donc on va voir comment lui faire faire sa validation par un DNS.
Installer le plugin dns-rfc2136
Autant certbot est disponible dans la majorité des distributions, autant ce n'est pas le cas pour ses plugins.
Il faut donc l'installer en utilisant pip:
[root@linux] # | pip install certbot-dns-rfc2136 | dblclick to copy |
Configurer le plugin dns-rfc2136
Une fois installé, il faut créer à la main le fichier de configuration.
Je passerais sur la création de la clé et la configuration de la mise à jour dynamique du DNS, reportez vous à cet article si besoin BIND : Configuration des mises à jour dynamique.
Pour le fichier de configuration, il devra ressembler à ça:
# 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_CLE].
# TSIG key secret
dns_rfc2136_secret = [CLE_SECRETE]
# TSIG key algorithm
dns_rfc2136_algorithm = HMAC-SHA512
IP_DU_SERVEUR_DNS : Ici doit obligatoirement se trouver son IP, le nom ne fonctionne pas.
NOM_CLE et CLE_SECRETEsont les deux éléments d'identifications pour la mise à jour.
Obtenir son certificat
Une fois que tout est en place, une simple commande suffit pour obtenir son certificat.
L'option --server est indispensable Tous les serveurs ne proposent pas ces certificats |
[root@linux] # | certbot certonly --dns-rfc2136-credentials [credential_file] --dns-rfc2136 -d [domain] -d '*.[domain]' --server https://acme-v02.api.letsencrypt.org/directory | dblclick to copy |
credential_file : C'est le chemin vers le fichier de configuration
domain : c'est le nom de domaine pour lequel on demande le certificat
Mes certificats
Une fois que certbot a fini son travail, tous les fichiers nécessaires à l'utilisation de votre certificats sont présents sur la machine locale.
Il est par contre important de les utiliser à leur emplacement d'origine (ou au moins d'y laisser une copie). Sinon le renouvellement sera impossible.
Vous trouverez donc des liens symboliques vers les différents fichiers dans /etc/letsencrypt/live/[domain]/
ou [domain] est le nom de domaine pour lequel vous avez demandé le certificat.
Descriptif des fichiers présents :
- privkey.pem : Clé privée du certificat
- fullchain.pem : Fichier contenant la chaine complète de certificats (celui demandé compris)
- cert.pem : Contient le certificat demandé
- chain.pem : Contient la chaine de certificats des autorités
Voir aussi
https://certbot.eff.org/docs/ https://letsencrypt.org/getting-started/ https://certbot-dns-rfc2136.readthedocs.io/en/latest/ https://letsencrypt.org/docs/staging-environment/