Est-ce la bonne façon de définir cron pour le renouvellement du certificat Let's Encrypt dans Apache2? J'utilise Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
utilisateur3448600
la source
la source
/etc/cron.d/certbot
Réponses:
Tous les mois n'est pas assez fréquent. Ce script doit être exécuté au moins une fois par semaine, et de préférence tous les jours. N'oubliez pas que les certificats ne sont pas renouvelés sauf s'ils sont proches de l'expiration. Tous les mois, vos certificats existants sont parfois expirés avant leur renouvellement.
Le nom du programme est
certbot
, qui a été renommé à partir deletsencrypt
. Si vous utilisez encoreletsencrypt
, vous devez mettre à jour la version actuelle.Mis à part ces problèmes, c'est à peu près la même chose que mes emplois cron.
Notez que dans 18.04 LTS, le paquet letsencrypt a été (enfin) renommé en certbot. Il inclut maintenant un minuteur systemd que vous pouvez activer pour planifier les renouvellements de certbot, avec
systemctl enable certbot.timer
etsystemctl start certbot.timer
. Cependant, Ubuntu n’a pas fourni de moyen de spécifier les hooks. Vous aurez besoin de configurer un remplacement pourcertbot.service
pouvoir remplacerExecStart=
par la ligne de commande souhaitée, jusqu'à ce que Ubuntu répare cela.la source
--renew-hook
plutôt que de--post-hook
ne redémarrer que si le certificat est renouvelé avec succès.certbot renew
ExecStartPost=/usr/sbin/service nginx reload
. Travaillé pour moi!ExecStartPost=
est une bonne idée. Pourquoi n'y ai-je pas pensé? Mais sachez que laservice
commande est obsolète; ce ne sera pas pour toujours. Passez auxsystemctl
commandes correspondantes .Je n'ai pas assez de réputation pour commenter, alors je vais répondre ici. Récemment (octobre 2017), j'ai installé et exécuté certbot sur un serveur Ubuntu 16.04 et un travail cron de renouvellement a été créé automatiquement dans
/etc/cron.d/certbot
.Voici le travail cron qui a été créé:
Ce serait une bonne idée de vérifier si ce fichier existe déjà avant de créer une entrée dans la crontab.
la source
certbot renew
s'il/run/systemd/system
est présent - c'est parce qu'un minuteur systemd exécute certbot - pour en savoir plus sur certbot et les timers systemd, cliquez ici .43 6 * * *
ferait courir tous les jours à 6h43. Une fois par jour devrait suffire, mais l’un ou l’autre fonctionne bien.La documentation de certbot recommande d'exécuter le script deux fois par jour:
Comme Michael Hampton le mentionne, le nom a été changé en certbot, mais ils fournissent toujours l'option -auto qui se met à jour. La
certbot-auto
commande nécessite des privilèges root pour être exécutée. La ligne de votre script cron doit donc ressembler à ceci:Dans mon cas, le
certbot-auto
script est placé dans le répertoire personnel de l'utilisateur git. La commande exacte est alorsNotez que l'exemple dans la documentation correspond à un chemin relatif, comme indiqué par le point qui peut prêter à confusion:
./path/to/certbot-auto renew --quiet
Assurez-vous de tester préalablement la commande renew dans un shell pour tester le chemin. Si le certificat n'est pas censé être renouvelé, rien ne se passera (exécutez ce test sans l'
--quiet
indicateur pour voir ce qui se passe).Il n'est pas strictement nécessaire de recharger le serveur lorsque le certificat est renouvelé de cette manière, car le chemin d'accès au certificat actif ne change pas s'il est configuré correctement.
Ceci est vrai si vous utilisez apache - pour nginx, pensez à ajouter un hook renouvelé, tel que:
la source
--renew-hook
Vous ne devriez pas avoir à configurer quoi que ce soit. Toute installation récente de certbot dans Debian / Ubuntu doit installer un temporisateur systemd et un travail cron (et le travail cron ne sera exécuté que
certbot
si systemd n’est pas actif, de sorte que les deux ne sont pas en cours d’exécution).minuterie systemd
Vous pouvez vérifier vos timers systemd en utilisant la commande
systemctl list-timers
(ousystemctl list-timers --all
si vous voulez aussi afficher les timers inactifs). Quelque chose comme ça:Le temporisateur certbot devrait être ici
/lib/systemd/system/certbot.timer
et il exécutera la commande spécifiée dans/lib/systemd/system/certbot.service
certbot.timer
exécutera le service `certbot.service à midi et à midi, après un délai aléatoire maximum de 12 heures (43 200 secondes).et
certbot.service
exécutera la commande renew.Cron
Comme d’autres l’ont mentionné, un travail cron est également installé dans
/etc/cron.d/certbot
:C'est faire:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- vérifie s'il/usr/bin/certbot
s'agit d'un fichier exécutable et qu'il ne/run/systemd/system
s'agit pas d' un répertoire. Continuez au bit suivant uniquement si cette vérification aboutit.perl -e 'sleep int(rand(43200))'
- dormir une quantité aléatoire entre 0 secondes et 12 heures (43200 = 12 x 60 x 60).certbot -q renew
vérifiez vos certificats et renouvelez-en si nécessaire. Le-q
drapeau est "silencieux" - ne produit aucune sortie sauf s’il ya une erreur.À l'origine, le travail cron m'avait dérouté car il ne s'exécutait pas à cause de systemd, comment exécuter certbot? J'ai trouvé la réponse dans ce post sur le forum et c'est ce sur quoi j'ai basé cette réponse.
la source
/etc/cron.d/certbot
existe,systemctl list-timers
montrecertbot.timer
, mais mes concerts n'ont pas été renouvelés. Courir à lacertbot
main a bien fonctionné, alors je ne sais pas ce qui se passe. Nous avons fini par ajouter unecrontab
entrée ancienne école .test
pour vérifier si systemd est actif et si c'est le cas, le travail cron se ferme immédiatement sans s'exécutercertbot
- voir le texte relatif à ce travail. Je vais éditer le texte pour être plus précis.Pour le renouvellement du certificat LetsEncrypt, j'utilise généralement getssl . C'est un wrapper de shell très pratique qui peut même installer un certificat sur d'autres machines via une connexion SSH.
L'entrée cron est la suivante:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Comme déjà suggéré, vous devriez l'exécuter quotidiennement ou, mieux encore, deux fois par jour.
la source
Comme déjà mentionné par glaux:
Source: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Donc, j'ai fini par l'utiliser (la course a lieu deux fois par jour, à 01h00 et à 13h00 tous les jours):
ou même mieux:
Je n'ai pas testé mais cela devrait marcher aussi:
Source: https://certbot.eff.org/docs/using.html
la source
--renew-hook
redémarrer votre serveur que lorsque le certificat est réellement renouvelé.--post-hook
et--renew-hook
être à laservice apache2 restart
place deservice restart apache2
?service restart apache2
commande / service n'est pas correcte.C'est ce que j'utilise:
donne la sortie comme:
Et c'est en disant que Apache est déjà redémarré, donc pas besoin de le refaire. Si je le lance à nouveau:
donc ce n'est pas un problème de renouveler le certificat quotidiennement, mon cron est alors:
J'utilise un script pour modifier la journalisation en fichier séparé, voici donc mon fichier cronautorenew.sh:
la source
D'autres membres ont déjà fourni des réponses beaucoup plus détaillées. Mais on dirait que je devrais le mentionner ici.
A partir de la version 0.21.1 de certbot, l'
--renew-hook
indicateur est remplacé par--deploy-hook
Assurez-vous que vous n'utilisez pas l'indicateur obsolète.la source
Selon le guide certbot EFF
Si vous ne savez pas si cela est déjà automatisé sur votre système, vérifiez la crontab de votre système (généralement, in
/etc/crontab/
et/etc/cron.*/*
$ crontab -l
and systemd timers$ systemctl list-timers
.la source