Automatisation du renouvellement des certificats Let’s Encrypt

Après une longue pause tuto, en voici un nouveau pour automatiser le renouvellement des certificats SSL Let’s Encrypt. Pour ceux qui ne connaissent pas Let’s Encrypt, je vous invite à jeter un oeil sur cet article.

Les certificats Let’s Encrypt étant valable 3 mois, c’est vite chiant de devoir les renouveler à la main tous les 3 mois. On va donc voir comment automatiser tout ça.

Commencez par créer un fichier lets_encrypt.ini (vous pouvez le nommer comme vous voulez) et mettez-y les lignes suivantes dedans :

[pastacode lang=”bash” manual=”authenticator%20%3D%20standalone%0Arenew-by-default%20%3D%20True%0Aagree-tos%3Dtrue%0Aemail%20%3D%20postmaster%40votredomaine.fr%0Adomains%3Dwww.memodugeek.info%2Cmemodugeek.info%0Arsa-key-size%20%3D%204096″ message=”lets_encrypt.ini” highlight=”” provider=”manual”/]

Ceci va être le fichier de config du client Certbot que l’on va lancer via un script pour renouveler nos certificats SSL. Si vous vous demandez à quoi correspondent ces lignes :

  • authenticator = standalone -> indique qu’on va utiliser un serveur web temporaire pour authentifier nos noms de domaine
  • renew-by-default = True -> indique qu’on va renouveler des certificats existants
  • agree-tos=true -> permet d’accepter les conditions d’utilisation de Certbot
  • email -> c’est l’adresse sur laquelle seront envoyés les messages de renouvellement. Il vous faut la modifier
  • domains -> indique les domaines pour lesquels vous voulez renouveler les certificats. Il vous faudra les modifier pour mettre vos nom de domaine
  • rsa-key-size = 4096 -> permet de générer un certificat avec une clé RSA de 4096 bits et non pas de 2048 bits comme c’est le cas par défaut.

Maintenant qu’on a créé notre fichier de config, passons au script. Créez un fichier script_letsencrypt.sh (là encore vous pouvez le nommer comme vous voulez) et collez les lignes suivantes dedans :

[pastacode lang=”bash” manual=”%23!%2Fbin%2Fsh%0A%0A%23V%C3%A9rification%20de%20l’expiration%20du%20certificat%20SSL%20de%20memodugeek.info%22%0A%0Aif%20!%20openssl%20×509%20-checkend%2086400%20-in%20%2Fetc%2Fletsencrypt%2Flive%2Fwww.memodugeek.info%2Ffullchain.pem%3B%20%23Si%20le%20certificat%20expire%20d’ici%2024h%20(86400%20secondes)%0Athen%0Asystemctl%20stop%20apache2.service%0A%2Fhome%2Ffate%2Fcertbot%2Fcertbot-auto%20certonly%20–config%20%2Fhome%2Ffate%2Flets_encrypt.ini%0Asystemctl%20start%20apache2.service%0Afi” message=”script_letsencrypt.sh” highlight=”” provider=”manual”/]

Petite explication sur ce script.
La troisième ligne, qui commence par “if !”, va permettre de vérifier la date d’expiration du certificat SSL d’ici un temps donné (ici 86400 secondes, soit 24h).  openssl x509 -checkend 86400 va renvoyer 1 si le certificat sera encore valide dans 24h et 0 dans le cas inverse.
Le if ! va donc faire sortir du script s’il reçoit un 1 et continuer l’exécution du script s’il reçoit un 0 (ce qui signifie que le certificat ne sera plus valable d’ici 24h). Il vous faudra penser à modifier le répertoire du certficat (/etc/letsencrypt/live/www.memodugeek.info/fullchain.pem) pour mettre le répertoire de votre certificat.

Le script va donc arrêter Apache avec la commande systemctl stop apache2.service puis lancer le client Certbot avec le fichier de config lets_encrypt.ini grâce à la commande /home/fate/certbot/certbot-auto certonly --config /home/fate/lets_encrypt.ini. Là aussi il vous faudra modifier le répertoire dans lequel se trouve le client Certbot (/home/fate/certbot sur mon serveur) ainsi que le répertoire où se trouve le fichier de config créé précédemment (/home/fate/ sur mon serveur).

Une fois le certificat renouvelé, le script va relancer Apache avec la commande systemctl start apache2.service.
Pensez à rendre ce fichier exécutable avec la commande chmod +x script_letsencrypt.sh.

Il ne nous reste plus qu’a lancer ce script tous les jours via le crontab de l’utilisateur root. Ouvrez le crontab du root avec la commande sudo crontab -e et rajoutez la ligne 00 01 * * * /home/fate/script_letsencrypt.sh >> /var/log/lets-encrypt.log
Il vous faudra là aussi modifier le répertoire d’accès au script.
Le script sera lancé tous les jours à 1h du matin par l’utilisateur root  et votre certificat sera renouvelé automatiquement 24h avant son expiration. Les sorties seront stockés dans le fichier /var/log/lets-encrypt.sh, ce qui vous permettra de voir si des erreurs surviennent.

 

Ce sera tout pour aujourd’hui 😉

 

 

2 réponses pour “Automatisation du renouvellement des certificats Let’s Encrypt”

  1. Ping : pure-ftpd, SSL, FTPS et Let's Encrypt sur Debian 8

  2. Ping : Nextcloud et Syncthing - Memo du Geek

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.