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:
- les plugins authenticators
- 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
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
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.