Comment créer des certificats Let's Encrypt Wildcard avec Certbot

De Get Docs
Aller à :navigation, rechercher

Introduction

Un certificat générique est un certificat SSL qui peut sécuriser n'importe quel nombre de sous-domaines avec un seul certificat. Vous souhaiterez peut-être un certificat générique dans les cas où vous devez prendre en charge plusieurs sous-domaines mais que vous ne souhaitez pas tous les configurer individuellement.

Let's Encrypt est une autorité de certification SSL qui accorde des certificats gratuits à l'aide d'une API automatisée. Dans ce tutoriel, vous allez créer un certificat générique Let's Encrypt en suivant ces étapes :

  1. Assurez-vous que votre DNS est correctement configuré
  2. Installation des plugins Certbot nécessaires pour relever les défis basés sur le DNS
  3. Autoriser Certbot à accéder à votre fournisseur DNS
  4. Récupération de vos certificats

Ces informations sont destinées à être utiles pour toute distribution Linux et tout logiciel serveur, mais vous devrez peut-être combler certaines lacunes avec une documentation supplémentaire, à laquelle nous ferons un lien au fur et à mesure.

Conditions préalables

Ce didacticiel suppose que vous disposez déjà des éléments suivants :

  • L'utilitaire Certbot installé, version 0.22.0 ou ultérieure. Si vous avez besoin d'aide pour installer Certbot, veuillez visiter notre Let's Encrypt tag page, où vous trouverez des guides d'installation pour une variété de distributions et de serveurs Linux. Certaines configurations courantes sont répertoriées ci-dessous :
  • Un nom de domaine et un fournisseur DNS pris en charge par Certbot. Voir Certbot's DNS plugin list pour une liste des fournisseurs pris en charge

Commençons par configurer et tester nos enregistrements DNS.

Étape 1 - Configuration du DNS Wildcard

Avant de récupérer notre certificat SSL générique, nous devons nous assurer que notre serveur répond aux demandes sur plusieurs sous-domaines. Cela sera généralement accompli en configurant un enregistrement DNS générique ', qui ressemble à ceci :

*.example.com.   3600  IN  A  203.0.113.1

Le caractère générique * est traité comme un remplaçant pour tout nom d'hôte. Cet exemple d'enregistrement DNS correspondrait à one.example.com et two.example.com. Il ne correspondrait pas au seul example.com ni au one.two.example.com car le caractère générique * ne s'étendra qu'à un seul nom d'hôte, et non à plusieurs niveaux de noms.

De plus, un enregistrement DNS générique ne peut avoir que un caractère générique, donc *.*.example.com n'est pas autorisé.

Veuillez vous référer à la documentation de votre fournisseur DNS pour configurer les entrées DNS correctes. Vous voudrez ajouter un enregistrement générique A ou CNAME avant de continuer.

Remarque : Si vous utilisez DigitalOcean pour gérer votre DNS, veuillez consulter Comment créer, modifier et supprimer des enregistrements DNS dans notre documentation produit pour plus d'informations.


Pour tester que votre DNS générique fonctionne comme prévu, utilisez la commande host pour interroger quelques noms d'hôte :

host one.example.com

Assurez-vous de remplacer votre propre domaine et nom d'hôte ci-dessus. N'oubliez pas non plus qu'il faut parfois quelques minutes pour que les enregistrements DNS se propagent dans le système. Si vous venez d'ajouter votre enregistrement DNS et que vous obtenez des erreurs, attendez quelques minutes et réessayez.

Lorsque le nom d'hôte que vous avez entré est correctement résolu, vous obtenez un résultat semblable à celui-ci :

Outputone.example.com has address 203.0.113.1

Sinon, vous verrez une erreur NXDOMAIN :

OutputHost one.example.com not found: 3(NXDOMAIN)

Une fois que vous avez vérifié que plusieurs sous-domaines sont résolus sur votre serveur, vous pouvez passer à l'étape suivante, où vous configurerez Certbot pour se connecter à votre fournisseur DNS.

Étape 2 - Installation du bon plugin DNS Certbot

Avant d'émettre des certificats, Let's Encrypt effectue un défi pour vérifier que vous contrôlez les hôtes pour lesquels vous demandez des certificats. Dans le cas d'un certificat générique, nous devons prouver que nous contrôlons l'ensemble du domaine. Pour ce faire, nous répondons à un défi basé sur le DNS, où Certbot répond au défi en créant un enregistrement DNS spécial dans le domaine cible. Les serveurs de Let's Encrypt vérifient ensuite cet enregistrement avant d'émettre le certificat.

Pour se connecter à votre fournisseur DNS, Certbot a besoin d'un plugin. Veuillez consulter la liste des plugins DNS de Certbot pour obtenir le nom du plugin approprié pour votre fournisseur DNS.

Par exemple, le fournisseur DigitalOcean s'appelle certbot-dns-digitalocean. Nous pouvons installer le plugin certbot-dns-digitalocean sur Ubuntu et Debian en installant le package suivant :

sudo apt install python3-certbot-dns-digitalocean

Les autres plugins doivent suivre le même format de nommage. Remplacez le nom de votre fournisseur par la commande ci-dessus si vous utilisez un autre service.

Sur CentOS et d'autres distributions basées sur RPM, la commande d'installation peut être dnf :

dnf install python3-certbot-dns-digitalocean

Ou yum :

yum install python3-certbot-dns-digitalocean

Vous devrez peut-être également installer des référentiels de packages supplémentaires sur ces distributions pour accéder aux packages de plug-ins Certbot.

Pour vérifier que le plugin a été correctement installé, vous pouvez demander à Certbot de lister ses plugins actuels :

certbot plugins
Output- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* dns-digitalocean
Description: Obtain certs using a DNS TXT record (if you are using DigitalOcean
for DNS).
Interfaces: IAuthenticator, IPlugin
Entry point: dns-digitalocean =
certbot_dns_digitalocean.dns_digitalocean:Authenticator

* standalone
Description: Spin up a temporary webserver
Interfaces: IAuthenticator, IPlugin
Entry point: standalone = certbot.plugins.standalone:Authenticator

* webroot
Description: Place files in webroot directory
Interfaces: IAuthenticator, IPlugin
Entry point: webroot = certbot.plugins.webroot:Authenticator
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Dans la sortie ci-dessus, le plug-in dns-digitalocean est répertorié en premier, ainsi que les plug-ins par défaut standalone et webroot.

Lorsque vous avez vérifié que le bon plugin est installé, passez à l'étape suivante pour le configurer.

Étape 3 - Configuration du plugin Certbot

Étant donné que Certbot doit se connecter à votre fournisseur DNS et créer des enregistrements DNS en votre nom, vous devez lui donner l'autorisation de le faire. Cela implique d'obtenir un jeton d'API ou d'autres informations d'authentification auprès de votre fournisseur DNS et de le placer dans un fichier d'informations d'identification sécurisé que Certbot lira plus tard.

Étant donné que chaque fournisseur a un processus d'authentification différent, veuillez vous reporter à la documentation de votre plug-in DNS Certbot particulier pour plus d'informations sur les jetons ou les clés que vous devrez obtenir.

Pour cet exemple, nous continuerons à utiliser le plugin dns-digitalocean, et stockerons nos identifiants dans le fichier ~/certbot-creds.ini.

Nous allons créer ce fichier à l'aide de l'éditeur de texte nano :

nano ~/certbot-creds.ini

Cela ouvrira un nouveau fichier texte vierge. Vous voudrez ajouter vos informations en fonction des instructions de votre fournisseur DNS particulier. DigitalOcean nécessite un seul jeton API, il ressemblera donc à ceci :

~/certbot-creds.ini

dns_digitalocean_token = 235dea9d8856f5b0df87af5edc7b4491a92745ef617073f3ed8820b5a10c80d2

Assurez-vous de remplacer l'exemple de jeton ci-dessus par vos propres informations.

Enregistrez et fermez le fichier. Si vous utilisez nano, tapez CTRL+O (pour "écrire out"), appuyez sur ENTER, puis CTRL+X pour sortie.

Après avoir créé le fichier, vous devrez restreindre ses autorisations afin que votre secret ne soit pas divulgué à d'autres utilisateurs. La commande chmod suivante donnera un accès en lecture et en écriture à votre utilisateur uniquement :

chmod 600 ~/certbot-creds.ini

Une fois que vous avez configuré votre fichier d'informations d'identification, vous êtes prêt à demander le certificat.

Étape 4 - Récupération du certificat

À ce stade, la récupération de votre certificat générique Let's Encrypt est similaire aux certificats "normaux" non génériques. Les principaux changements apportés au processus consistent à spécifier le défi basé sur le DNS et à pointer vers notre fichier d'informations d'identification DNS. De plus, nous utiliserons un domaine générique avec le drapeau -d :

sudo certbot certonly \
  --dns-digitalocean \
  --dns-digitalocean-credentials ~/certbot-creds.ini \
  -d '*.example.com'

Notez que vous ne pouvez pas utiliser les plugins --nginx ou --apache pour configurer automatiquement ces serveurs avec un certificat générique. Nous utilisons à la place la commande certonly, pour télécharger uniquement le certificat.

Lors de l'exécution de la commande ci-dessus, vous devrez peut-être répondre à quelques questions s'il s'agit de votre première utilisation de Certbot. Après y avoir répondu, Cerbot exécutera le défi, les serveurs Let's Encrypt le vérifieront et votre nouveau certificat sera téléchargé et enregistré sur /etc/letsencrypt/. Vous devriez voir une sortie semblable à la suivante :

OutputIMPORTANT 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 2021-09-27. 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

Vous avez généré avec succès un certificat SSL générique ! Votre prochaine étape consiste à configurer votre application serveur pour l'utiliser. Nous établirons un lien vers certaines ressources qui peuvent vous aider à cet égard dans la section suivante.

Conclusion

Dans ce didacticiel, vous avez configuré Certbot et téléchargé un certificat SSL générique à partir de l'autorité de certification Let's Encrypt. Vous êtes maintenant prêt à configurer votre logiciel serveur pour utiliser ce certificat afin de sécuriser ses connexions.

Pour plus d'informations sur les fichiers de certificat téléchargés et sur la manière de gérer le redémarrage de vos applications lorsque Certbot met automatiquement à jour vos certificats, consultez les étapes 3 et 4 de notre didacticiel Comment utiliser le mode autonome de Certbot pour récupérer Let's Encrypt SSL Certificats sur Ubuntu 18.04.