2017-02-17 8 views
8

Automatyzuję odnawianie certyfikatu SSL z certbota LetsEncrypt. Rzeczywiste odnowienie działa, ale muszę zautomatyzować ponowne uruchamianie usług, aby ładowały odnowione certyfikaty. Zastanawiam się, czy można użyć wielu parametrów --renew-hook w cronjob dla letsencrypt renew?LetsEncrypt certbot multiple renew-hooks

Jak zautomatyzować ponowne uruchamianie usług po odnowieniu certyfikatu?

Odpowiedz

11

Tak, możesz użyć wielu instrukcji -rene-hook. używaj również flagi -q, aby wysłać ci puste powiadomienie, dopóki nie nastąpi odnowienie. Nie uruchamia również żadnej z Twoich usług do czasu odnowienia. Dołącza to również plik dziennika do wiadomości e-mail, jeśli sobie tego życzysz.

Mam crona, który uruchamia bash codziennie.

Wewnątrz mojego bash (certbotrenew.sh) jest po prostu to

#!/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 

i mój cron jest

00 20 * * 1 /bin/certbotrenew.sh 

Niektórzy ludzie pytanie, dlaczego wysłać e-mail bez względu, czy nic się nie stało, po prostu zawsze lubię wiedzieć, że moje codzienne crony są uruchomione.

+0

wygląda domyślnego menedżera pakietów dla Ubuntu 16.04 zawiera starą wersję Certbota, która nie akceptuje argumentów '--renew-hook'. –

+1

Tak, repo ma bardzo starą wersję Let's Encrypt, która w zeszłym roku została przemianowana na certbot. Możesz po prostu odinstalować wersję repozytorium, a następnie po prostu 'mkdir/opt/certbot', a następnie' cd/opt/certbot', a następnie 'sudo wget https: // dl.eff.org/certbot-auto', po prostu uruchom swój certbot -auto linii poleceń stamtąd. Jeśli pamięć służy mi poprawnie, wersja w repozytorium Ubuntu to v0.4 zaszyfrowania. Certbot ma teraz wartość 0.11. – MitchellK

+2

@MitchellK - zamiast otrzymywać codzienną wiadomość e-mail dotyczącą cron, możesz skorzystać z usługi raportowania cron, takiej jak https://IsItWorking.info (moja). Twój skrypt cron może się sprawdzić za każdym razem, gdy działa poprawnie. Jeśli to nie nastąpi, usługa ostrzega. (Ewentualnie oprócz e-maila) –

7

Z tego co widziałem ze świeżej instalacji w Ubuntu 16.04 z CertBot, tworzy crona:

# /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/' 

Więc wykonuje to run-parts na wiele katalogów, w tym /etc/letsencrypt/renew-hook.d/

Wystarczy dodać plik wykonywalny w dowolnym z tych katalogów przechwytujących (wybierz ten, którego potrzebujesz).

Jako przykład, w moim renew-hook.d stworzyłem plik restart-nginx o następującej treści:

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

Jako Uwaga: Można wiedzieć jakie pliki będą nazywane przez run-parts używając opcji --test. (Przykład run-parts --test /etc/letsencrypt/renew-hook.d/

+3

W rzeczywistości zmieniono crabjob certyfiksu, aby nie zawierał już parametrów tych części. Zalecanym sposobem na osiągnięcie tego samego teraz jest utworzenie '/ etc/letsencrypt/cli.ini' i określenie tam parametrów hook, zobacz https://github.com/certbot/certbot/issues/1706#issuecomment-302774426 – Drew

2

Można również zestaw haczyków (i inne opcje, jeśli chcesz) jak globalnych opcji w pliku /etc/letsencrypt/cli.ini (see documentation) tak:

# 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 

Musisz utworzyć plik najpierw na większości systemów. Letsencrypt przychodzi bez.

można również utworzyć wersję konkretnego certyfikatu w każdym folderze renewal jeśli nie podoba ci się udać globalny.