2017-02-17 17 views
8

Я автоматизирую обновление сертификата SSL из certbot LetsEncrypt. Фактическое обновление работает, но мне нужно автоматизировать перезапуск служб, чтобы они загружали обновленные сертификаты. Мне было интересно, можете ли вы использовать несколько параметров --renew-hook внутри cronjob для letsencrypt renew?LetsEncrypt certbot несколько повторных крючков

Как автоматизировать перезапуск служб при обновлении сертификата?

ответ

11

Да, вы можете использовать несколько выражений с выраженным крючком. также используйте флаг -q, чтобы он посылал вам по электронной почте пустое уведомление до тех пор, пока обновление не произойдет. Он также не перезапускает какие-либо из ваших сервисов до тех пор, пока не произойдет обновление. Это также прикрепляет файл журнала к электронной почте, если вы этого желаете.

У меня есть cron, который ежедневно запускает bash.

Внутри моей Баш (certbotrenew.sh) просто это

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

и мой хрон является

00 20 * * 1 /bin/certbotrenew.sh 

Некоторые люди задаются вопросом, почему я отправить по электронной почте, независимо от того, если ничего не произошло, я просто всегда как знать, что мои ежедневные кроны бегут.

+0

похоже, менеджер пакета по умолчанию Ubuntu 16.04 содержит старую версию Certbot, которая не принимает аргументы '--renew-hook'. –

+1

Да, у репо есть очень старая версия Let's Encrypt, которая в прошлом году была переименована в certbot. Вы можете просто удалить версию репо, а затем просто 'mkdir/opt/certbot', а затем' cd/opt/certbot', а затем 'sudo wget https: // dl.eff.org/certbot-auto', а затем просто запустите свой certbot Командные строки -auto оттуда. Если память мне подходит, версия в репозитории Ubuntu v0.4 позволяет зашифровать. Certbot теперь в 0.11. – MitchellK

+2

@MitchellK - вместо того, чтобы получать ежедневную электронную почту cron, как насчет службы отчетности cron, такой как https://IsItWorking.info (мой). Ваш скрипт cron может проверять каждый раз, когда он запускается успешно. Если он не регистрируется, служба уведомляет вас. (Возможно, в дополнение к электронной почте) –

7

Из того, что я видел из новой установки в Ubuntu 16.04 из CertBot, он создает хрон:

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

Так он выполняет run-parts на многих каталогах, в том числе /etc/letsencrypt/renew-hook.d/

Вам просто нужно добавить исполняемый файл в любом из этих каталогов hook (выберите тот, который вам нужен).

В качестве примера, в моем renew-hook.d я создал файл restart-nginx со следующим содержанием:

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

Как примечание: Вы можете узнать, какие файлы будут вызываться run-parts с помощью опции --test. (Пример run-parts --test /etc/letsencrypt/renew-hook.d/

+3

Они фактически изменили cronjob certbot, чтобы больше не включать те параметры run-parts. Рекомендуемый способ сделать то же самое сейчас - создать файл '/ etc/letencrypt/cli.ini' и указать параметры крючка там, см. https://github.com/certbot/certbot/issues/1706#issuecomment-302774426 – Drew

2

Вы можете также установить крючки (и другие варианты, если вам нравится) как глобальные параметры в файле /etc/letsencrypt/cli.ini (see documentation), как это:

# 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 

Вы должны создать файл в первую очередь на большинстве систем. Letsencrypt поставляется без.

вы также можете создать сертификат конкретной версии в каждой папке renewal, если вам не нравится, чтобы выйти на мировой рынок.