Продление сертификата Let's Encrypt через systemd
Текущий рецеп основан на статье "Renew let’s encrypt SSL via systemd". Изменены только пути и время запуска - для соответствия статье по настройке получения сертификата "Настройка Nginx с Let's Encrypt на CentOS 7". В результате описанных в данной статье действий, сертификат будет обновляться не через cron, а с помощью таймера systemd.
Итак. Шаги для настройки автоматического продления сертификатов (которые выдаются на 90 дней).
Активируем таймер для автоматического старта после перезагрузки:
Итак. Шаги для настройки автоматического продления сертификатов (которые выдаются на 90 дней).
1. Создаём сервис systemd:
sudo nano /etc/systemd/system/letsencrypt.service
Вставляем такое содержимое:[Unit]
Description=Renews letsencrypt certificates
After=network.target
[Service]
Type=oneshot
WorkingDirectory=/opt/letsencrypt/
ExecStart=/opt/letsencrypt/letsencrypt-auto renew
2. Создаём таймер для запуска:
sudo nano /etc/systemd/system/letsencrypt.timer
Вставляем такое содержимое:[Unit]
Description=letsencrypt timer
[Timer]
OnCalendar=*-*-10 02:12:0
Persistent=true
Unit=letsencrypt.service
[Install]
WantedBy=basic.target
Это позволит запускать обновление каждый месяц 10-го числа в 2:12 ночи. День нужно подставить свой (например, за день относительно даты получения вашего сертификата). Если ваши сертификаты выданы в разные дни, то, возможно, вам лучше будет поставить на ежедневное выполнение. Различные примеры настроек таймеров можно подсмотреть в статье "Systemd.timer. Запуск задач по расписанию".Активируем таймер для автоматического старта после перезагрузки:
sudo systemctl enable letsencrypt.timer
Запускаем таймер:sudo systemctl start letsencrypt.timer
3. После того, как сертификаты будут продлены, нужно перегрузить nginx.
Сделаем это также через systemd. Создадим каталог для настройки:sudo mkdir /etc/systemd/system/letsencrypt.service.d
Создадим настройку:sudo nano /etc/systemd/system/letsencrypt.service.d/nginx.conf
С таким содержимым:[Service]
ExecStartPost=/usr/bin/systemctl reload nginx
4. Теперь можно всё протестировать.
Перезагрузим systemd, чтобы определился новый сервис:sudo systemctl daemon-reload
Запустим сервис:sudo systemctl start letsencrypt.service
Результат работы сервиса можно пронаблюдать в сообщениях лога:journalctl -f
Дополнительная заметка об ошибке при продлении
Во время продления сертификата на свой поддомен с NextCloud возникали ошибки вида:Processing /etc/letsencrypt/renewal/nc.mydomen.ru.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for nc.mydomen.ru
Waiting for verification...
Cleaning up challenges
Attempting to renew cert (nc.mydomen.ru) from /etc/letsencrypt/renewal/nc.mydomen.ru.conf produced an unexpected error: Failed authorization procedure. nc.mydomen.ru (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://nc.mydomen.ru/.well-known/acme-challenge/aA1vd8UBtTg7fOd-Hr39kAprUSNByU7DG-QaMXq37ig: "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.or". Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/nc.mydomen.ru/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certs are not due for renewal yet:
/etc/letsencrypt/live/mydomen.ru/fullchain.pem expires on 2018-11-09 (skipped)
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/nc.mydomen.ru/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)
Очень долго пытался исправить ошибку путём настройки конфига nginx для URI .well-known/acme-challenge. Оказалось напрасно. Решилось заменой плагина, который используется для продления сертификата. Был webroot, стал nginx. В конфиге /etc/letsencrypt/renewal/nc.mydomen.ru.conf:
[renewalparams]
authenticator = nginx
Комментарии
Отправить комментарий