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 😉
Ping : pure-ftpd, SSL, FTPS et Let's Encrypt sur Debian 8
Ping : Nextcloud et Syncthing - Memo du Geek