Comment acquérir un certificat Let's Encrypt à l'aide de la validation DNS avec acme-dns-certbot sur Ubuntu 18.04

De Get Docs
Aller à :navigation, rechercher

L'auteur a sélectionné le COVID-19 Relief Fund pour recevoir un don dans le cadre du programme Write for DOnations.

Introduction

La majorité des certificats Let's Encrypt sont émis à l'aide de la validation HTTP, ce qui permet une installation facile des certificats sur un seul serveur. Cependant, la validation HTTP n'est pas toujours adaptée à l'émission de certificats à utiliser sur des sites Web à charge équilibrée, et ne peut pas non plus être utilisée pour émettre des certificats génériques.

La validation DNS permet de vérifier les demandes d'émission de certificat à l'aide d'enregistrements DNS, plutôt qu'en diffusant du contenu via HTTP. Cela signifie que des certificats peuvent être émis simultanément pour un cluster de serveurs Web fonctionnant derrière un équilibreur de charge ou pour un système qui n'est pas directement accessible sur Internet. Les certificats génériques sont également pris en charge à l'aide de la validation DNS.

L'outil acme-dns-certbot est utilisé pour connecter Certbot à un serveur DNS tiers où les enregistrements de validation de certificat peuvent être définis automatiquement via une API lorsque vous demandez un certificat. L'avantage est que vous n'avez pas besoin d'intégrer Certbot directement à votre compte de fournisseur DNS, ni de lui accorder un accès illimité à votre configuration DNS complète, ce qui est bénéfique pour la sécurité.

Les zones DNS déléguées sont utilisées pour rediriger les recherches des enregistrements de vérification de certificat vers le service DNS tiers. Ainsi, une fois la configuration initiale terminée, vous pouvez demander autant de certificats que vous le souhaitez sans avoir à effectuer toute validation manuelle.

Un autre avantage clé d'acme-dns-certbot est qu'il peut être utilisé pour émettre des certificats pour des serveurs individuels qui peuvent s'exécuter derrière un équilibreur de charge ou qui ne sont pas directement accessibles via HTTP. La validation de certificat HTTP traditionnelle ne peut pas être utilisée dans ces cas, à moins que vous ne définissiez les fichiers de validation sur chaque serveur. L'outil acme-dns-certbot est également utile si vous souhaitez émettre un certificat pour un serveur qui n'est pas accessible sur Internet, tel qu'un système interne ou un environnement intermédiaire.

Dans ce didacticiel, vous utiliserez le hook acme-dns-certbot pour que Certbot émette un certificat Let's Encrypt à l'aide de la validation DNS.

Conditions préalables

Pour terminer ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 18.04 configuré en suivant la Configuration initiale du serveur avec Ubuntu 18.04, y compris un utilisateur sudo non root.
  • Un nom de domaine pour lequel vous pouvez acquérir un certificat TLS, y compris la possibilité d'ajouter des enregistrements DNS. Dans cet exemple particulier, nous utiliserons your-domain et subdomain.your-domain, ainsi que *.your-domain pour un certificat générique. Cependant, cela peut être ajusté pour d'autres domaines, sous-domaines ou caractères génériques si nécessaire.

Une fois que vous les avez prêts, connectez-vous à votre serveur en tant qu'utilisateur non root pour commencer.

Étape 1 - Installation de Certbot

Dans cette étape, vous allez installer Certbot, qui est un programme utilisé pour émettre et gérer les certificats Let's Encrypt.

Certbot est disponible dans les référentiels officiels d'Ubuntu Apt, cependant, il est plutôt recommandé d'utiliser le référentiel géré par les développeurs de Certbot, car il contient toujours la version la plus récente du logiciel.

Commencez par ajouter le référentiel Certbot :

sudo apt-add-repository ppa:certbot/certbot

Vous devrez appuyer sur ENTER pour accepter l'invite et ajouter le nouveau référentiel à votre système.

Ensuite, installez le package Certbot :

sudo apt install certbot

Une fois l'installation terminée, vous pouvez vérifier que Certbot a bien été installé :

certbot --version

Cela affichera quelque chose de similaire à ce qui suit :

Outputcertbot 0.31.0

Dans cette étape, vous avez installé Certbot. Ensuite, vous allez télécharger et installer le hook acme-dns-certbot.

Étape 2 — Installation d'acme-dns-certbot

Maintenant que le programme Certbot de base a été installé, vous pouvez télécharger et installer acme-dns-certbot, qui permettra à Certbot de fonctionner en mode de validation DNS.

Commencez par télécharger une copie du script :

wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

Une fois le téléchargement terminé, marquez le script comme exécutable :

chmod +x acme-dns-auth.py

Ensuite, éditez le fichier à l'aide de votre éditeur de texte préféré et ajustez la première ligne afin de le forcer à utiliser Python 3 :

nano acme-dns-auth.py

Ajoutez un 3 à la fin de la première ligne :

acme-dns-certbot.py

#!/usr/bin/env python3
. . .

Ceci est nécessaire pour garantir que le script utilise la dernière version prise en charge de Python 3, plutôt que l'ancienne version Python 2.

Une fois terminé, enregistrez et fermez le fichier.

Enfin, déplacez le script dans le répertoire Certbot Let's Encrypt afin que Certbot puisse le charger :

sudo mv acme-dns-auth.py /etc/letsencrypt/

Au cours de cette étape, vous avez téléchargé et installé le crochet acme-dns-certbot. Ensuite, vous pouvez commencer le processus de configuration et travailler à l'émission de votre premier certificat.

Étape 3 - Configuration d'acme-dns-certbot

Pour commencer à utiliser acme-dns-certbot, vous devez effectuer un processus de configuration initial et émettre au moins un certificat.

Commencez par exécuter Certbot pour le forcer à émettre un certificat en utilisant la validation DNS. Cela exécutera le script acme-dns-certbot et déclenchera le processus de configuration initial :

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

Vous utilisez l'argument --manual pour désactiver toutes les fonctionnalités d'intégration automatisées de Certbot. Dans ce cas, vous émettez simplement un certificat brut, plutôt que de l'installer automatiquement sur un service également.

Vous configurez Certbot pour utiliser le hook acme-dns-certbot via l'argument --manual-auth-hook. Vous exécutez l'argument --preferred-challenges pour que Certbot donne la préférence à la validation DNS.

Vous devez également dire à Certbot de faire une pause avant de tenter de valider le certificat, ce que vous faites avec l'argument --debug-challenges. Cela vous permet de définir le ou les enregistrements DNS CNAME requis par acme-dns-certbot, qui est traité plus loin dans cette étape. Sans l'argument --debug-challenges, Certbot ne s'arrêterait pas, vous n'auriez donc pas le temps d'effectuer la modification DNS requise.

N'oubliez pas de substituer chacun des noms de domaine que vous souhaitez utiliser en utilisant les arguments -d. Si vous souhaitez émettre un certificat générique, assurez-vous d'échapper l'astérisque (*) avec une barre oblique inverse (\).

Après avoir suivi les étapes standard de Certbot, vous serez invité par un message similaire au suivant :

Output...
Output from acme-dns-auth.py:
Please add the following CNAME record to your main DNS zone:
_acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io.

Waiting for verification...
...

Vous devrez ajouter l'enregistrement DNS CNAME requis à la configuration DNS de votre domaine. Cela déléguera le contrôle du sous-domaine _acme-challenge au service DNS ACME, ce qui permettra à acme-dns-certbot de définir les enregistrements DNS requis pour valider la demande de certificat.

Si vous utilisez DigitalOcean comme fournisseur DNS, vous pouvez définir l'enregistrement DNS dans votre panneau de contrôle :

Il est recommandé de régler le TTL (durée de vie) à environ 300 secondes afin de s'assurer que toute modification apportée à l'enregistrement se propage rapidement.

Une fois que vous avez configuré l'enregistrement DNS, retournez à Certbot et appuyez sur ENTER pour valider la demande de certificat et terminer le processus d'émission.

Cela prendra quelques secondes, puis vous verrez un message confirmant que le certificat a été émis :

Output...
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your-domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your-domain/privkey.pem
...

Vous avez exécuté acme-dns-certbot pour la première fois, configuré les enregistrements DNS requis et émis avec succès un certificat. Ensuite, vous configurerez les renouvellements automatiques de votre certificat.

Étape 4 - Utilisation d'acme-dns-certbot

Dans cette dernière étape, vous utiliserez acme-dns-certbot pour émettre plus de certificats et renouveler ceux qui existent déjà.

Tout d'abord, maintenant que vous avez émis avec succès au moins un certificat à l'aide d'acme-dns-certbot, vous pouvez continuer à émettre des certificats pour les mêmes noms DNS sans avoir à ajouter un autre enregistrement DNS CNAME. Cependant, si vous souhaitez acquérir un certificat pour un sous-domaine différent ou un nom de domaine entièrement nouveau, vous serez invité à ajouter un autre enregistrement CNAME.

Par exemple, vous pouvez émettre un autre certificat générique autonome sans avoir à effectuer à nouveau la vérification :

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

Cependant, si vous tentiez d'émettre un certificat pour un sous-domaine, vous seriez invité à ajouter un enregistrement CNAME pour le sous-domaine :

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

Cela affichera une sortie similaire à la configuration initiale que vous avez effectuée à l'étape 3 :

Output...
Please add the following CNAME record to your main DNS zone:
_acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io.

Waiting for verification...
...

Maintenant que vous pouvez utiliser acme-dns-certbot pour émettre des certificats, il convient également de prendre en compte le processus de renouvellement.

Une fois que vos certificats arrivent à expiration, Certbot peut les renouveler automatiquement pour vous :

sudo certbot renew

Le processus de renouvellement peut s'exécuter du début à la fin sans intervention de l'utilisateur et se souviendra de toutes les options de configuration que vous avez spécifiées lors de la configuration initiale.

Pour tester que cela fonctionne sans avoir à attendre plus près de la date de péremption, vous pouvez déclencher un essai à blanc. Cela simulera le processus de renouvellement sans apporter de modifications réelles à votre configuration.

Vous pouvez déclencher une simulation à l'aide de la commande standard renew, mais avec l'argument --dry-run :

sudo certbot renew --dry-run

Cela produira quelque chose de similaire à ce qui suit, qui fournira l'assurance que le processus de renouvellement fonctionne correctement :

Output...
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator manual, Installer None
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for your-domain
dns-01 challenge for your-domain
Waiting for verification...
Cleaning up challenges
...

Dans cette dernière étape, vous avez émis un autre certificat, puis testé le processus de renouvellement automatique dans Certbot.

Conclusion

Dans cet article, vous configurez Certbot avec acme-dns-certbot afin d'émettre des certificats à l'aide de la validation DNS. Cela ouvre la possibilité d'utiliser des certificats génériques ainsi que de gérer un grand nombre de serveurs Web distincts qui peuvent se trouver derrière un équilibreur de charge.

Assurez-vous de garder un œil sur le référentiel acme-dns-certbot pour toute mise à jour du script, car il est toujours recommandé d'exécuter la dernière version prise en charge.

Si vous souhaitez en savoir plus sur acme-dns-certbot, vous pouvez consulter la documentation du projet acme-dns, qui est l'élément côté serveur de acme-dns-certbot :

Le logiciel acme-dns peut également être auto-hébergé, ce qui peut être avantageux si vous travaillez dans des environnements hautement sécurisés ou complexes.

Vous pouvez également approfondir les détails techniques de la validation DNS ACME en consultant la section pertinente du document RFC officiel qui décrit le fonctionnement du processus :