Ist dies die richtige Methode, um cron für die Erneuerung des Let's Encrypt-Zertifikats in Apache2 festzulegen? Ich benutze Ubuntu 16.04.
@monthly letsencrypt renew && service apache2 reload
cron
lets-encrypt
user3448600
quelle
quelle
/etc/cron.d/certbot
Antworten:
Monatlich ist nicht häufig genug. Dieses Skript sollte mindestens wöchentlich und vorzugsweise täglich ausgeführt werden. Denken Sie daran, dass Zertifikate erst erneuert werden, wenn sie kurz vor dem Ablauf stehen, und dass Ihre vorhandenen Zertifikate monatlich gelegentlich bereits verfallen, bevor sie erneuert werden.
Der Name des Programms ist
certbot
, von dem aus umbenannt wurdeletsencrypt
. Wenn Sie immer noch verwendenletsencrypt
, müssen Sie auf die aktuelle Version aktualisieren.Abgesehen von diesen Problemen ist es ungefähr dasselbe wie meine Cronjobs.
Beachten Sie, dass in 18.04 LTS das letsencrypt-Paket (endgültig) in certbot umbenannt wurde. Es enthält jetzt einen System-Timer, mit dem Sie Certbot-Erneuerungen mit
systemctl enable certbot.timer
und planen könnensystemctl start certbot.timer
. Ubuntu bot jedoch keine Möglichkeit, Hooks anzugeben. Sie müssen eine Außerkraftsetzung für einrichtencertbot.service
, umExecStart=
die gewünschte Befehlszeile außer Kraft zu setzen , bis Ubuntu dies behebt.quelle
--renew-hook
anstelle von neu--post-hook
zu starten, wenn das Zertifikat erfolgreich erneuert wurde.certbot renew
wird nur funktionieren ™ExecStartPost=/usr/sbin/service nginx reload
. Arbeitete für mich!ExecStartPost=
ist eine gute Idee. Warum habe ich nicht daran gedacht? Beachten Sie jedoch, dass derservice
Befehl veraltet ist. es wird nicht für immer da sein. Wechseln Sie zu den entsprechendensystemctl
Befehlen.Ich habe nicht genug Reputation, um einen Kommentar abzugeben, also werde ich hier antworten. Ich habe kürzlich (Oktober 2017) certbot auf einem Ubuntu 16.04-Server installiert und ausgeführt, und in wurde automatisch ein Erneuerungs-Cron-Job erstellt
/etc/cron.d/certbot
.Hier ist der Cron-Job, der erstellt wurde:
Es ist ratsam, vor dem Erstellen eines crontab-Eintrags zu prüfen, ob diese Datei bereits vorhanden ist.
quelle
certbot renew
wenn er/run/systemd/system
vorhanden ist. Dies liegt daran, dass ein System-Timer Certbot ausführt. Weitere Informationen zu Certbot- und System-Timern finden Sie hier .43 6 * * *
es jeden Tag um 6:43 Uhr laufen. Einmal am Tag sollte ausreichen, aber beides funktioniert einwandfrei.In der certbot-Dokumentation wird empfohlen, das Skript zweimal täglich auszuführen :
Wie Michael Hampton erwähnt, wurde der Name in certbot geändert, sie bieten jedoch weiterhin die Option -auto, die sich selbst auf dem neuesten Stand hält. Der
certbot-auto
Befehl benötigt root-Berechtigungen, damit er ausgeführt werden kann. Die Zeile in Ihrem Cron-Skript sollte also ungefähr so aussehen:In meinem Fall wird das
certbot-auto
Skript im Home-Verzeichnis des Git-Benutzers abgelegt. Der genaue Befehl lautet dannBeachten Sie, dass das Beispiel in der Dokumentation einem relativen Pfad entspricht, wie durch den Punkt angegeben, der verwirrend sein kann:
./path/to/certbot-auto renew --quiet
Stellen Sie sicher, dass Sie den Befehl renew zuvor in einer Shell testen, um den Pfad zu testen. Wenn das Zertifikat nicht erneuert werden muss, passiert nichts (führen Sie diesen Test ohne
--quiet
Flag aus, um zu sehen, was passiert).Es ist nicht unbedingt erforderlich, den Server neu zu laden, wenn das Zertifikat auf diese Weise erneuert wird, da sich der Pfad zum Live-Zertifikat bei korrekter Einrichtung nicht ändert.
Dies ist der Fall, wenn Sie Apache ausführen. Fügen Sie für Nginx einen Erneuerungs-Hook hinzu, z.
quelle
--renew-hook
Sie sollten nichts einrichten müssen. Jede neuere Debian / Ubuntu-Installation von certbot sollte einen systemd-Timer und einen cron-Job installieren (und der cron-Job wird nur ausgeführt,
certbot
wenn systemd nicht aktiv ist, damit nicht beide ausgeführt werden).System-Timer
Sie können Ihre System-Timer mit dem Befehl überprüfen
systemctl list-timers
(odersystemctl list-timers --all
wenn Sie auch inaktive Timer anzeigen möchten). Etwas wie das:Der Certbot-Timer sollte hier sein
/lib/systemd/system/certbot.timer
und führt den in angegebenen Befehl aus/lib/systemd/system/certbot.service
certbot.timer
wird den certbot.service um 12 und 12 Uhr nach einer zufälligen Verzögerung von bis zu 12 Stunden (43200 Sekunden) ausführen.und
certbot.service
führt den Erneuerungsbefehl aus.Cron-Job
Wie bereits erwähnt, ist auch ein Cron-Job installiert in
/etc/cron.d/certbot
:Das macht:
test -x /usr/bin/certbot -a \! -d /run/systemd/system
- Überprüfen Sie, ob/usr/bin/certbot
es sich um eine ausführbare Datei handelt und ob/run/systemd/system
es sich nicht um ein Verzeichnis handelt. Fahren Sie erst mit dem nächsten Bit fort, wenn diese Prüfung erfolgreich ist.perl -e 'sleep int(rand(43200))'
- Schlaf eine zufällige Menge zwischen 0 Sekunden und 12 Stunden (43200 = 12 x 60 x 60).certbot -q renew
Überprüfen Sie Ihre Zertifikate und erneuern Sie sie gegebenenfalls. Das-q
Flag ist "leise" - es wird nur ausgegeben, wenn ein Fehler vorliegt.Ich war ursprünglich durch den Cron-Job verwirrt, da er aufgrund von systemd nicht ausgeführt werden würde. Wie würde Certbot ausgeführt werden? Ich habe die Antwort in diesem Forumsbeitrag gefunden, auf die ich diese Antwort gestützt habe.
quelle
/etc/cron.d/certbot
existiert,systemctl list-timers
zeigtcertbot.timer
, aber meine Zertifikate wurden nicht erneuert. Dascertbot
manuelle Laufen hat gut funktioniert, ich weiß also nicht, was los ist. Fügte am Ende einencrontab
Eintrag der alten Schule hinzu .test
, um zu überprüfen, ob systemd aktiv ist, und wenn dies der Fall ist, wird der Cron-Job sofort beendet, ohne ausgeführt zu werdencertbot
- siehe den Text über den Cron-Job. Ich werde den Text genauer bearbeiten.Für die Erneuerung des LetsEncrypt-Zertifikats verwende ich im Allgemeinen getssl . Es ist ein sehr praktischer Shell-Wrapper, der sogar Zertifikate über eine SSH-Verbindung auf anderen Computern installieren kann.
Der Cron-Eintrag lautet wie folgt:
01 23 * * * root /root/scripts/getssl/getssl -u -a -q >>/var/log/getssl.log 2>&1 ; /usr/sbin/apache2ctl graceful
Wie bereits empfohlen, sollten Sie es täglich oder sogar zweimal täglich ausführen.
quelle
Wie schon von glaux erwähnt:
Quelle: https://certbot.eff.org/all-instructions/#debian-8-jessie-apache
Also habe ich das letztendlich benutzt (Laufen ist zweimal am Tag, um 01:00 und um 13:00 jeden Tag):
oder noch besser:
Ich habe nicht getestet, aber das sollte auch funktionieren:
Quelle: https://certbot.eff.org/docs/using.html
quelle
--renew-hook
, wenn Ihr Server erst neu gestartet wird, wenn das Zertifikat tatsächlich erneuert wird.--post-hook
und--renew-hook
seinservice apache2 restart
stattservice restart apache2
?service restart apache2
Befehl / Dienst ist nicht korrekt.Das benutze ich:
gibt aus als:
Und es besagt, dass Apache bereits neu gestartet wurde, so dass es nicht nötig ist, es noch einmal zu wiederholen. Wenn ich es erneut ausführe:
Daher ist es kein Problem, das Zertifikat täglich zu erneuern. Mein Cron lautet dann:
Ich verwende ein Skript, um die Protokollierung in einer separaten Datei zu optimieren. Hier ist meine cronautorenew.sh:
quelle
Andere Mitglieder gaben bereits detailliertere Antworten. Aber anscheinend sollte ich es hier erwähnen.
Ab certbot Version 0.21.1 wurde das
--renew-hook
Flag in--deploy-hook
Vergewissern Sie sich, dass Sie kein veraltetes Flag verwenden.quelle
Laut EFF Certbot Guide
Wenn Sie nicht sicher sind, ob Ihr System dies bereits automatisiert hat, überprüfen Sie die crontab Ihres Systems (normalerweise in
/etc/crontab/
und/etc/cron.*/*
$ crontab -l
und systemd-Timern)$ systemctl list-timers
.quelle