Développeur FullStack & Devops

Notes et mémos techniques

Let's Encrypt: les certificats SSL/TLS gratuits

Let’s Encrypt est une autorité de certification 🔐(CA en anglais) qui délivre la plupart des certificats TLS / SSL dans le monde (plus de 56% des certificats, le 2ème CA étant Cloudflare avec 13% – chiffres d’Aout 2020) et est gérée par l’ISRG qui est sponsorisé par quelques mastodontes du web tel que Mozilla, Akamai, Cisco, EFF.

Certbot

Let’s Encrypt présente la particularité de fournir gratuitement 🎉 un système automatisé de délivrance de certificats SSL (ou TLS), et pour cela l’ISRG a développé le protocole ACME  que l’on peut exploiter grâce au CLI Certbot (développé par l’EFF).

Certbot (anciennement 💀 certbot-auto ou letsencrypt) est l’outil qui va nous permettre de :

  • gérer (obtenir, renouveler ou révoquer) les certificats SSL Let’s Encrypt
  • installer ces certificats sur notre serveur Web

Certbot n’est actuellement disponible que sur les Unix/Linux.

Installation

Déterminer notre OS

Pour l’installer suivre la procédure propre à chaque système, identifier notre système et versions par :

grep -wE 'ID_LIKE|VERSION' /etc/*-release

Installer le CLI Certbot

S'assurer de ne pas avoir un ancien binaire qui traine sinon faire un sudo apt-get remove certbot, puis il suffit d'utiliser snapd pour installer la CLI Certbot:

sudo apt install snapd
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo snap set certbot trust-plugin-with-root=ok
sudo certbot --version

Principe d’utilisation de Certbot

certbot permet via la ligne de commande, d’effectuer les actions suivantes grâce à un système de plugins qu’il est important de bien comprendre. Ces Plugins sont de 2 types:

  1. les plugins authenticators
  2. les plugins installers

Mode interactif

Le plus simple consiste a exécuter la commande certbot en mode interactif (avec des questions réponses), par exemple la commande suivante va nous aider à générer des certificats pour les domaines hébergés sur le nginx :

sudo certbot --nginx

certbot en mode interactif

Authentifier votre serveur web

Certbot va nous permettre d’authentifier le serveur web qui héberge le domaine pour lequel nous souhaitons obtenir le certificat SSL (valide pour une durée de 3 mois).

Pour cette étape, il faut utiliser les plugins de type authenticators que l’on va spécifier via la sous-commande certonly, voici un exemple d’utilisation du plugin authenticator webroot avec l’option --webroot-path (-w) et l’option --dry-run qui permet tester sa config :

sudo certbot certonly --webroot -w /var/www/example -d www.example.com -d example.com --dry-run 

Installer le certificat

La CLI peut éventuellement permettre d’installer ce certificat sur votre serveur web (Nginx, Apache etc.), pour cela il faut utiliser les plugins de type installers via la sous-commande install

Certains plugins sont des authenticators et des installers comme les plugins apache et ngnix (voir également les plugins non officiels), ils sont alors utilisable via la sous-commande run (qui est implicitement utilisée lorsqu’on ne spécifie ni certonly, ni install).
Il faudra alors utiliser des options pour spécifier le type de plugin :

  • --authenticator  (ou -a)
  • --installer (ou -i)
sudo certbot run -a webroot -i nginx -w /var/www/html -d example.com

Si on souhaite obtenir un certificat manuellement, il est possible  d’utiliser le plugin authenticator manual.

Certificats wildcard

Si vous possédez de nombreux sous domaines ou que pour des raisons de sécurité vous souhaitez éviter leurs énumérations par certificats, Let’s Encrypt nous offre depuis Janv 2018 des certificats joker (wildcard certificate), et pour cela il suffit de spécifier en -d *.votrenomdedomaine.fr.
Pour compléter la procédure, vous devrez avoir accès à votre registrar pour ajouter un champs DNS de type TXT.
Voici la commande pour générer le certificat manuellement sans plugins:

sudo certbot --server https://acme-v02.api.letsencrypt.org/directory -d *.behrouze.com --manual --preferred-challenges dns-01 certonly

certbot pour obtention de certificat wildcard

Gestion des certificats

Lister les certificats

Certbot propose de nombreuses possibilité en matière de gestion de certificats.

sudo certbot certificates

permet d’afficher les informations concernant les certificats SSL actuellement installés sur votre serveur, leurs localisation dans le système de fichier ainsi que leurs date d’expiration.

Attention: A noter que cette sous-commande nous indique les informations concernant nos domaines ainsi que les fichiers de clés privés et certificats, par contre elle n’indique pas si notre serveur web est correctement configuré pour les exploiter.

Révoquer un certificat

En cas d’attaque du serveur web contenant les certificats, il est important de révoquer et supprimer les certificats installés (car exploitable par les hackers), puis en régénérer de nouveaux:

sudo certbot revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem --reason keycompromise

l’option --reason est optionnelle et peut comprendre les valeurs :
unspecified (par défaut) keycompromise affiliationchanged superseded ou cessationofoperation

sudo certbot delete --cert-name example.com

Gestion des certificats

Le renouvellement de certificat s’effectue via la commande certbot renew et il sera utile de mettre un job cron pour automatiser cette tache et ne pas se retrouver avec des certificats expirés…

Les fichiers de configuration de certbot sont situés dans le dossier suivant /etc/letsencrypt/renewal/nom_certificat. Pour annuler le renouvellement de certains certificat, il suffit de supprimer le fichier correspondant au certificat dans ce dossier.

Aller plus loin

Pour bien comprendre le fonctionnement de Certbot cad le process d’obtention et d’installation de certificats et son système de plugins lire le User Guide, un peu long 😒 mais très intéressant 👍

Le site de Let’s Encrypt comporte également beaucoup d’informations.

admin-linux
linux
certbot
ssl
linux
rédigé le 30/08/18, mis à jour le 08/03/22 par Behrouze
A proposCheat SheetsOutilsVidéos