19

mon petit script pour renouveler mes certificats Let’s Encrypt

Après avoir passé ce blog et d’autres sites web dont je gère en full HTTPS grâce à Let’s Encrypt, j’ai écrit un petit script bash pour automatiser le renouvellement de mes certificats 24h avant les 90 jours de limite de validité.

httpsmemolinuxletsencrypt

Mon petit script de renouvellement pour mes certificats Let’s Encrypt

Avant d’écrire le script d’automatisation de renouvellement, il faut passer par une étape de configuration en créant un fichier avec l’extension .ini pour chaque domaine (site web).

De plus, pour être notifié par mail pensez à configurer un MTA.

Configuration d’un fichier .ini pour chaque domaine

  • Pour le domaine memo-linux.com :
  • nano /opt/letsencrypt/memo-linux.ini
    rsa-key-size = 4096
    email = admin@memo-linux.com
    domains = memo-linux.com,www.memo-linux.com,cdn-01.memo-linux.com,cdn-02.memo-linux.com
    text = True
    authenticator = standalone
    renew-by-default = True
    agree-tos = True
    
  • exemple pour un second domaine :
  • nano /opt/letsencrypt/autre-site.ini
    rsa-key-size = 4096
    email = admin@autre-site.tld
    domains = autre-site.tld,cdn.autresite.tld
    text = True
    authenticator = standalone
    renew-by-default = True
    agree-tos = True
    

Quelques explications :

  • rsa-key-size : Chiffrement de la clé sur 4096bits.
  • email : l’e-mail de destination pour être notifié du renouvellement.
  • domains : le domaine ou sous domaine généré(s) avec ce certificat
  • text : pour exécuter letsencrypt-auto uniquement en lignes de commandes.
  • authenticator : méthode de vérification de l’identité du domaine.
  • renew-by-default : comme les certificats existent déjà, on indique que c’est uniquement pour renouveler le certificat
  • agree-tos : pour accepter les conditions d’utilisation de Let’s Encrypt

Attention, Let’s Encrypt limite la génération de 5 certificats par semaine (pour l’instant).

Mon script de renouvellement des certificats Let’s Encrypt

MAJ: script modifié, merci à Tetsumaki.
Avec cette modification, les certificats seront renouveler 24h avant la date d’expiration.

nano /home/fred/script/updatecrt.sh


#!/bin/sh
cd /opt/letsencrypt/

if ! openssl x509 -checkend 86400 -noout -in /etc/letsencrypt/live/memo-linux.com/cert.pem
then
systemctl stop nginx
/opt/letsencrypt/letsencrypt-auto certonly --config /opt/letsencrypt/memo-linux.ini
temoin=1
fi

if ! openssl x509 -checkend 86400 -noout -in /etc/letsencrypt/live/autre-site.tld/cert.pem
then
systemctl stop nginx
/opt/letsencrypt/letsencrypt-auto certonly --config /opt/letsencrypt/autre-site.ini
temoin=1
fi

if [[ $temoin ]];
then
systemctl start nginx
fi

Ne pas oublier de rendre exécutable le sript :

chmod +x /home/fred/script/updatecrt.sh

Planification de l’exécution du script

Pour ce faire, je vais utiliser crontab et configurer pour exécuter le script toutes les 24h

crontab -e
0 2 1 */2 * /home/fred/script/updatecert.sh
systemctl restart cron

Partager l'article :





fred

"Dire que l'on s'en fiche du droit à la vie privée sous prétexte qu'on a rien à cacher, c'est comme déclarer que l'on se fiche du droit à la liberté d'expression sous prétexte qu'on a rien à dire." Edward Snowden

19 commentaires

  1. Hello,

    Je trouve ça très dommage de générer le certificat de manière aléatoire comme tu le fais.

    Le faire à ta façon signifie que le certificat sera généré tous les 2 mois à condition de ne pas redémarrer le serveur ou redémarrer la daemon cron, de plus le certificat est valide 3 mois, pourquoi donc faire comme ceci.

    Il serait préférable de tester la validité du certificat en vérifiant le temps restant et donc de lancer la tâche cron tous les jours.

    Par exemple comme ceci :

    #!/bin/sh

    if ! openssl x509 -checkend 86400 -noout -in /etc/letsencrypt/live/memo-linux/cert.pem
    then
    /opt/letsencrypt/letsencrypt-auto certonly –config /opt/letsencrypt/memo-linux.ini
    temoin=1
    fi

    if ! openssl x509 -checkend 86400 -noout -in /etc/letsencrypt/live/autre-site/cert.pem
    then
    /opt/letsencrypt/letsencrypt-auto certonly –config /opt/letsencrypt/autre-site.ini
    temoin=1
    fi

    if [[ $temoin ]];
    then
    systemctl reload nginx
    fi

    Avec un cron chaque jour à 03h03 par exemple :
    3 3 * * * /home/fred/script/updatecert.sh

    J’ai un peu simplifié le script mais c’est ma méthode, de cette façon tu génères un certificat si celui-ci expire dans moins de 86400 secondes (24h) et donc lancer le cron toutes les 24h est une bonne manière de faire afin de respecter des bonnes pratiques et ne pas solliciter les serveurs Let’s Encrypt inutilement.

  2. Merci Tetsumaki,
    effectivement en y réfléchissant un peu plus ta méthode est quand même sacrément plus propre. Je voulais faire simple mais pour le coup, c’était trop simple…

  3. Petite question: est-ce que ça fonctionne sous ton user?
    Ou le crontab se fait en root? ou avec www-data?
    J’ai du mal à imaginer que ça puisse tourner avec un utilisateur non-privilégié (utilisation du port 80, re-démarrage de service,…)

  4. Yahallo,
    Petite question également : j’ai bien installé mon certif’, tout allait bien, je touchais à rien (je me co’ plus au serveur quoi) et là, je vois mon https en rouge : « Le certificat du serveur n’est pas approuvé »
    Je dois régénérer le certif’ ?

    Merci d’avance x)

  5. Salut illox,
    est-ce que auparavant tu avais créé un certificat auto-signé ?
    en tout cas, de mon côté aucun souci pour accéder à ton site en https…

  6. Oui, apparemment certains parviennent à avoir le https en vert sans problème…

    Me concernant, et concernant également d’autres personne, nous avons plus souvent le https en erreur (rouge) que vert… :/

    Il y a-t-il une manipulation ou ça vient de Let’s Encrypt ?

  7. A mon idée cela ne vient pas des let’s encrypt mais de ta conf, avec quel navigateur ou ça pose problème ?
    Quel sont les cypher que tu as mis en place ?

  8. Je n’ai pas encore mis les ciphers en place…
    Je le fais ce W-E, tu as une recommandation à ce niveau ?

    Merci d’avance x)

  9. perso j’ai mis ceux là : EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

  10. text : pour exécuter letsencrypt-auto uniquement en lignes de commandes ;-)

  11. Yahallo x)
    J’ai régénéré mes certifs’ avec certonly… Mais je n’ai gagné que 8 jours…
    Comment cela se fait-il ?
    Merci d’avance x)

  12. Bonjour et merci pour ce script
    Par contre je dois l’avoir découvert un peu tard; Visiblement il ne fonctionne plus certainement suite à la dernière maj de Let’s Encrypt.
    J’obtiens ce message en retour : « letsencrypt: error: unrecognized arguments: config /root/ssl/svnet.ini »
    D’après de ce que j’en conclus, l’argument « -config » n’existerait plus

    Bien Librement

  13. Bonjour svnet,
    arf, encore un problème de mise en forme du code, en fait c’est --config et non -config

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *