Let’s Encrypt est une autorité de certification 🔐(CA en anglais) qui délivre plus de 50% des certificats SSL dans le monde 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 (ou certbot-auto anciennement letsencrypt 💀) est l’outil qui va nous permettre de gérer (obtenir, renouveler ou révoquer) les certificats SSL Let’s Encrypt et les installer sur notre serveur Web.

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

Installer Certbot

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

dans mon cas, mon serveur web est hébergé sur un Raspberry Pi et le système Raspbian est un dérivé de Debian Stretch, et voici donc la procédure mon mon système (Stretch):

# il faut d'abord ajouter le répo backports pour debian Stretch
sudo sh -c "echo \"deb http://ftp.debian.org/debian stretch-backports main\" > /etc/apt/sources.list.d/stretch-backports.list"
# puis installer le CLI certbot
sudo apt update && sudo apt install python-certbot-nginx -t stretch-backports

note: on utilise un repo apt spécifique aux backports debian stretch, faire abstraction des erreurs gpg ou corriger

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) qui sont de 2 types:

  1. les plugins authenticators
  2. les plugins installers

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 les plugins --authenticator  (ou -a) et --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.

Gestion des certificats

Lister les certificats

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

La commande sudo certbot certificates  permet d’afficher les informations concernant les certificats SSL actuellement installés sur votre serveur.

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

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.