Let's Encrypt
Automatiser le renouvellement d'un certificat Let's Encrypt avec Certbot (Debian)
Prérequis : avoir créé un certificat Let's Encrypt avec Certbot.
Les certificats Let's Encrypt sont valides pendant 90 jours. Il faut donc les renouveler dans l'intervalle. Pour cela, il existe cette commande :
sudo certbot renew
Lorsqu'elle est lancée, cette commande vérifie la validité de tous les certificats gérés par Certbot. Si un certificat dispose de moins de 30 jours de validité, il est alors renouvelé avec les mêmes options que celles utilisées pour le créer.
Si toutefois mon certificat a une période de validité supérieure à 30 jours, Certbot me répond en conséquence:
-------------------------------------------------------------------------------
Cert not yet due for renewal
-------------------------------------------------------------------------------
Pour automatiser l'exécution de cette commande, je vais utiliser crontab.
Je crée un fichier de configuration cron (le nom n'a pas d'importance) :
sudo touch /etc/cron.d/certbot
Renouveler tous mes certificats
J'insère la ligne suivante dans mon fichier cron :
0 */12 * * * root certbot -q renew
L'utilisateur root lancera tous les jours à midi et minuit la commande certbot -q renew
. L'option -q est là pour éviter que cron n'envoie des rapports par mail à root.
Renouveler un seul certificat
Pour cela, je dois utiliser l'option --cert-name
de la façon suivante:
sudo certbot -q renew --cert-name [NOM_DU_CERTIFICAT]
Où [NOM_DU_CERTIFICAT] est le nom apparaissant à la ligne Certificate Name
, grâce à la commande:
sudo certbot certificates
Si je choisis de renouveler chaque certificat séparément, il me faudra créer une ligne par certificat dans le fichier cron.
Pour un certificat abc, la ligne à ajouter dans le fichier cron devient:
sudo certbot -q renew --cert-name abc
Versions récentes de Certbot
A partir de la version 0.19.0 de Certbot, le fichier /etc/cron.d/certbot est créé par Certbot.
Il contient (entre autres) la commande de renouvellement des certificats :
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
Dans ce cas, il suffit d'adapter le fichier à ses besoins.
Simuler un renouvellement
Afin de simuler un renouvellement, et pour ne pas épuiser le stock de vrais renouvellements autorisés chaque semaine par Let's Encrypt, il peux être intéressant de faire comme si.
Pour cela, il existe l'option --dry-run
:
sudo certbot renew --dry-run --cert-name abc
Cette commande va simuler le renouvellement du certificat abc, et va afficher dans le terminal les informations de succès ou d'échec.