web-dev-qa-db-fra.com

LetsEncrypt certbot plusieurs renew-hooks

J'automatise un renouvellement de certificat SSL à partir du certbot de LetsEncrypt. Le renouvellement actuel fonctionne, mais je dois automatiser le redémarrage des services pour qu'ils chargent les certificats renouvelés. Je me demandais si vous pouviez utiliser plusieurs paramètres --renew-hook dans le travail cron pour letsencrypt renew?

Comment automatiser le redémarrage des services lors du renouvellement du certificat?

9
Atte Juvonen

Oui, vous pouvez utiliser plusieurs instructions --renew-hook. utilisez également l’option -q pour qu’il vous envoie une notification vierge jusqu’à ce qu’un renouvellement se produise. En outre, aucun de vos services ne redémarre jusqu'à ce qu'un renouvellement soit effectué. Cela joint également le fichier journal à l’email si vous le souhaitez.

J'ai un cron qui court tous les jours.

Dans mon bash (certbotrenew.sh) se trouve simplement ceci

#!/bin/bash
cd /opt/certbot
Sudo ./certbot-auto renew --renew-hook "service postfix reload" --renew-hook "service dovecot restart" --renew-hook "service Apache2 reload" -q >> /var/log/certbot-renew.log | mail -s "CERTBOT Renewals" [email protected]  < /var/log/certbot-renew.log
exit 0

et mon cron est

00 20 * * 1 /bin/certbotrenew.sh

Certaines personnes se demandent pourquoi j'envoie un email, que rien ne se passe, j'aime toujours savoir que mes affaires quotidiennes fonctionnent.

13
MitchellK

D'après ce que j'ai vu de la nouvelle installation Ubuntu 16.04 de CertBot, cela crée un travail cron:

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates haven't been revoked, etc.  Renewal will only occur if expiration is within
# 30 days.
Shell=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew --pre-hook 
'/bin/run-parts /etc/letsencrypt/pre-hook.d/' --post-hook '/bin/run-parts /etc/letsencrypt/post-hook.d/' --renew-hook '/bin/run-parts
/etc/letsencrypt/renew-hook.d/'

Donc, il exécute run-parts sur plusieurs répertoires, y compris /etc/letsencrypt/renew-hook.d/

Vous devez simplement ajouter un fichier exécutable dans l’un de ces répertoires de raccordement (choisissez celui dont vous avez besoin).

Par exemple, dans mon renew-hook.d, j'ai créé un fichier restart-nginx avec le contenu suivant:

#!/bin/bash
/etc/init.d/nginx restart

Remarque: vous pouvez savoir quels fichiers seront appelés par run-parts à l'aide de l'option --test. (Exemple run-parts --test /etc/letsencrypt/renew-hook.d/

8
JorgeeFG

Vous pouvez également définir les points d'ancrage (et d'autres options si vous le souhaitez) comme options globales dans le fichier /etc/letsencrypt/cli.ini ( voir documentation ) comme ceci:

# Global config for letsencrypt runs
#
# Note that these options apply automatically to all use of Certbot for
# obtaining or renewing certificates, so options specific to a single
# certificate on a system with several certificates should not be placed
# here.

renew-hook = service postfix reload
post-hook = service nginx reload

Vous devez d'abord créer le fichier sur la plupart des systèmes. Letsencrypt vient sans.

Vous pouvez également créer une version spécifique au certificat dans chaque dossier renewal si vous n'aimez pas devenir global.

4
lorem monkey

La dernière méthode recommandée pour exécuter les scripts de raccordement provient de /etc/letsencrypt/cli.ini. Si le fichier n'est pas présent, vous pouvez le créer vous-même. Une autre chose est que vous devriez utiliser --deploy-hook à la place de --renew-hook. --renew-hook est toujours présent mais sera progressivement supprimé car il n'est même pas mentionné dans la documentation la plus récente.

Créez donc simplement /etc/letsencrypt/cli.ini s'il n'existe pas et ajoutez la ligne suivante: Deploy-hook = "service postfix reload; service dovecot restart; service Apache2 reload"

pour recharger ces services particuliers.

0
zoxxx

Il y a aussi un endroit qui contrôle certbot en cours d'exécution (sous Ubuntu 16.04 + nginx, j'ai sous les fichiers de paramètres)

1) minuterie systemd

lancer commnad: Sudo systemctl list-timers

et voir la sortie:

Sun 2018-07-08 00:46:59 EEST 7h left Sat 2018-07-07 12:36:26 EEST 4h 51min ago certbot.timer certbot.service

puis

2)

aller vérifier le fichier qui contrôle le temps quand systemctl exécute Certbot

/etc/systemd/system/timers.target.wants/certbot.timer

c'est un lien symbolique pour

/lib/systemd/system/certbot.timer

Faites attention à ces lignes qui définissent des temps + secondes aléatoires (définir un temps aléatoire afin de ne pas stresser simultanément permet de chiffrer les serveurs)

OnCalendar=--* 00,12:00:00

RandomizedDelaySec=3600
0
Ion Vladescu