Comment gérer les certificats SSL/TLS de Let’s Encrypt avec certbot

Let’s Encrypt est une autorité de certification (CA) automatisée et ouverte gérée par l’Internet Security Research Group (ISRG) et fondée par l’Electronic Frontier Foundation (EFF), la Mozilla Foundation et d’autres. Elle fournit des certificats SSL/TLS gratuits qui sont généralement utilisés pour crypter les communications à des fins de sécurité et de confidentialité, le cas d’utilisation le plus notable étant HTTPS. Let’s Encrypt s’appuie sur le protocole ACME (Automatic Certificate Management Environment) pour émettre, révoquer et renouveler les certificats. Certbot est un utilitaire gratuit et open-source principalement utilisé pour gérer les certificats SSL/TLS de l’autorité de certification Let’s Encrypt. Il est disponible pour la plupart des systèmes d’exploitation UNIX et similaires à UNIX, notamment GNU/Linux, FreeBSD, OpenBSD et OS X. Ce guide fournit une introduction à l’utilisation de certbot, indépendamment de la plateforme.

REMARQUE : certbot étant un travail en cours, certaines fonctionnalités ou comportements décrits dans ce guide peuvent différer dans les versions plus anciennes ou futures.

Exigences

  • Un nom de domaine enregistré avec un enregistrement A pointant vers ton adresse IPv4. `www.example.com` sera utilisé comme exemple.
  • Accès à un shell privilégié.

Concepts généraux

Modes de fonctionnement

L’utilisation de certbot pour activer HTTPS peut être divisée en deux parties : L’authentification et l’installation. La première nécessite de résoudre un défi et d’enregistrer le certificat et d’autres fichiers. L’étape d’installation implique de configurer et de sécuriser le serveur Web. Certbot peut effectuer les deux automatiquement, avec la sous-commande run. Les sous-commandes certonly et install concernent respectivement les étapes d’authentification et d’installation.

Certbot comprend également des fonctions de renouvellement et de révocation des certificats.

Défis

L’obtention d’un certificat Let’s Encrypt implique de résoudre un défi de validation de domaine émis par un serveur ACME (Automatic Certificate Management Environment). Ce défi vérifie que tu es propriétaire du ou des domaines pour lesquels tu essaies d’obtenir un certificat. Il existe différents types de défis, le plus couramment utilisé étant HTTP-01. Comme son nom l’indique, il utilise le protocole HTTP. Bien que les serveurs HTTP puissent être configurés pour utiliser n’importe quel port TCP, ce défi ne fonctionnera que sur le port 80 en raison des mesures de sécurité. DNS-01 est un autre type de défi, moins populaire, basé sur la résolution DNS. Note que les certificats wildcard ne peuvent pas être obtenus par le biais du défi HTTP-01. Ce guide se concentrera dans un premier temps sur HTTP-01.

Plugins

Certbot s’appuie sur des plugins pour effectuer l’authentification et l’installation. Les plugins tels que webroot et standalone n’effectuent que l’authentification, tandis que d’autres, comme les plugins Apache et Nginx, sont conçus pour obtenir et installer automatiquement les certificats (c’est-à-dire la configuration du serveur Web). D’autres plugins incluent plusieurs plugins DNS spécifiques aux fournisseurs pour l’authentification DNS-01. La plupart des plugins certbot sont installés séparément, sauf les plugins webroot et standalone qui sont intégrés.

Installer Certbot

La plupart des distributions Linux fournissent certbot dans leurs dépôts officiels. Tu trouveras ci-dessous les instructions d’installation pour les plateformes les plus utilisées.

Debian et Ubuntu :

apt update
apt install -y certbot

CentOS 7 :

yum install -y certbot

Fedora et CentOS 8 :

dnf install -y certbot

Arch Linux :

pacman -Sy certbot

FreeBSD :

pkg install py36-certbot

OpenBSD 6.0 et versions ultérieures :

pkg_add certbot

MacOS(homebrew requis) :

brew install letsencrypt

Autre :

Si un paquet certbot n’est pas disponible pour ta plateforme, tu peux utiliser le script wrapper officiel certbot-auto pour installer certbot automatiquement sur ton système. Il peut être téléchargé ici.

Utiliser Certbot

Lister les certificats

Pour afficher une liste des certificats gérés par certbot sur ton serveur, lance la commande :

certbot certificates

Obtention d’un certificat pour une configuration manuelle

Si tu choisis de configurer manuellement ton serveur Web, l’obtention d’un certificat peut se faire de deux manières. Soit en donnant à certbot l’accès au répertoire racine web de ton serveur (c’est-à-dire le plugin webroot), soit en déployant un serveur web autonome temporaire sur le port 80 (c’est-à-dire le plugin standalone). Ce dernier plugin est utile dans les cas où l’intégration à ton serveur Web existant est impossible ou non souhaitée. Pour plus de commodité et des renouvellements plus simples, sois cohérent avec le plugin utilisé.

Utiliser un serveur Web existant

Pour utiliser ton serveur Web existant, assure-toi qu’il est en cours d’exécution et qu’il écoute sur le port 80 avant d’exécuter la commande suivante

certbot certonly --webroot

Tu seras invité à entrer, entre autres informations, ton ou tes noms de domaine et le chemin d’accès à ton webroot, qui est `/var/www/html/` par défaut sur la plupart des systèmes Linux. Tu peux aussi spécifier les informations requises comme arguments de commande. Par exemple :

certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m [email protected] -d www.example.com

Utiliser le serveur Web autonome

Afin d’utiliser le serveur autonome, assure-toi d’abord de la disponibilité du port 80. Tu peux vérifier si des processus se lient à ce port en utilisant :

ss -lntp 'sport = 80'

Si nécessaire, arrête le service/processus incriminé avant de poursuivre. Ensuite, lance la commande :

certbot certonly --standalone

Une fois le certificat émis, tu devras configurer ton serveur Web manuellement. Les fichiers pertinents se trouvent dans /etc/letsencrypt/live/your_domain.

Installation HTTPS interactive

Comme mentionné précédemment, certbot peut automatiser l’ensemble du processus d’installation HTTPS, y compris la configuration du serveur Web. Des plugins sont disponibles pour Apache et Nginx, et il peut être nécessaire de les installer dans un paquet séparé. Installe le plugin certbot spécifique à ton serveur Web, puis exécute `certbot run –PLUGIN_NAME`. Nous allons faire une démonstration du processus complet pour Apache sur un système Debian 10. Le processus pour Nginx est similaire.

apt install -y python-certbot-apache
certbot run --apache

En supposant que ton serveur Web est déjà configuré pour ton ou tes noms de domaine, certbot analysera la configuration existante et t’invitera à choisir pour quel(s) nom(s) de domaine HTTPS doit être activé. Si ton serveur Web n’est pas configuré, ou si certbot ne parvient pas à détecter ton ou tes noms de domaine, il te suffit d’entrer manuellement ton ou tes noms de domaine lorsque tu y es invité. Par exemple :

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1

Certbot créera un nouveau fichier de configuration Apache pour ton nouvel hôte virtuel HTTPS, et te demandera si le trafic HTTP doit être redirigé vers HTTPS. À moins que tu aies de bonnes raisons de ne pas le faire, tu devrais activer la redirection vers HTTPS.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/www.example.com.conf to ssl vhost in /etc/apache2/sites-available/www.example.com-le-ssl.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://www.example.com

Renouvellement des certificats

Renouvellement manuel

Pour renouveler tes certificats avec certbot, tu peux utiliser la sous-commande renew. Pendant le renouvellement, certbot utilisera les mêmes plugins et options que ceux utilisés pour l’émission initiale. Les certificats ne sont renouvelés que s’ils expirent dans moins de 30 jours. Cette sous-commande peut donc être utilisée aussi souvent que tu le souhaites, car elle ne prendra aucune mesure si les certificats ne sont pas proches de leur date d’expiration. La commande est simple :

certbot renew

Si le plugin autonome a été utilisé pour émettre un certificat, tu devras arrêter ton serveur Web pour que le renouvellement réussisse. Tu peux y parvenir en utilisant des crochets. Par exemple, si le système exécute Apache, la commande serait la suivante :

certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"

Renouvellement automatique

De nombreuses distributions ont activé les renouvellements automatiques par défaut, soit via des minuteries systemd, soit via des tâches cron. Tu peux vérifier les minuteries systemd avec :

systemctl list-timers

Et pour les jobs cron avec: :

ls /etc/cron*

Si le plugin webroot a été utilisé pour l’émission, les renouvellements automatiques devraient réussir tant que ton serveur web est en marche. Avec le plugin autonome, cependant, la commande de renouvellement automatisé par défaut échouera si un serveur Web est en cours d’exécution, car certbot ne sera pas en mesure de se lier au port 80. Il faut donc la modifier en ajoutant des crochets, comme indiqué ci-dessus.

Révoquer des certificats

La révocation d’un certificat peut être réalisée en spécifiant le chemin ou le nom du certificat :

certbot revoke --cert-name cert_name
(OR)
certbot revoke --cert-path /path/to/cert.pem

Par exemple :

certbot revoke --cert-name www.example.net

Après avoir exécuté la sous-commande de révocation, certbot demandera si les fichiers de certificat doivent être supprimés. Si tu choisis de ne pas les supprimer, le certificat révoqué sera renouvelé lors de la prochaine occurrence de renouvellement. Plusieurs options auto-explicatives peuvent être passées à la sous-commande de révocation :

  • –delete-after-revoke (demande le choix de l’utilisateur par défaut)
  • –no-delete-after-revoke (invite l’utilisateur à choisir par défaut)
  • –reason [non spécifié, compromis de clé, affiliation modifiée, remplacé, cessation d’activité]. (Par défaut : non spécifié)

Certificats Wildcard

Un seul certificat wildcard peut être utilisé pour identifier plusieurs sous-domaines, au lieu de certificats réguliers séparés. Pour obtenir un certificat wildcard, il faut utiliser le défi DNS-01. Bien qu’il existe plusieurs plugins spécifiques aux fournisseurs qui automatisent le processus d’authentification ACME, nous allons expliquer le processus manuel, indépendant des fournisseurs. Tu dois avoir accès aux serveurs de noms de ton domaine.

Utilise la commande suivante pour demander un certificat joker :

certbot certonly --manual --preferred-challenges dns-01 -d *.example.net

Certbot affichera une valeur qui doit être déployée dans un enregistrement TXT du DNS. Cet enregistrement TXT sert à la validation nécessaire de la propriété.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.net with the following value:
y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcU
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

Tu devras créer l’enregistrement spécifié dans ton panneau de contrôle DNS avant de poursuivre. Une fois l’enregistrement créé, attends quelques minutes avant d’appuyer sur Entrée, ce qui déclenche la vérification du serveur ACME. Dans certains cas, un temps d’attente plus long peut être nécessaire pour que le nouvel enregistrement se propage correctement et soit accessible. En cas de succès, le certificat, la chaîne et la clé privée seront enregistrés sous /etc/letsencrypt/live/example.com/.

Références et informations supplémentaires

Vous aimerez aussi...