Автопродление сертификатов Let's Encrypt и как убедиться, что оно работает
Сертификаты Let's Encrypt живут 90 дней, поэтому продлевать их вручную быстро надоедает. Certbot умеет делать это сам, но есть пара мест, где легко ошибиться.
Таймер уже есть
При установке из пакетов Debian и Ubuntu certbot добавляет systemd-таймер, который дважды в день проверяет сертификаты и продлевает те, у которых осталось меньше 30 дней:
systemctl list-timers | grep certbot
systemctl status certbot.timer
Проверка без продления
Перед тем как полагаться на таймер, стоит один раз прогнать пробное продление. Оно ходит в тестовый сервер Let's Encrypt и ничего не меняет:
certbot renew --dry-run
Не забыть перезагрузить nginx
Новый сертификат появится на диске, но nginx продолжит отдавать старый, пока его не перезагрузить. Для этого нужен deploy-хук: он выполняется только после успешного продления.
cat > /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh <<'EOF'
#!/bin/sh
systemctl reload nginx
EOF
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
Сколько осталось
Срок действия удобно смотреть прямо с сервера, как его видит клиент:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -enddate
Если дата не сдвигается, а до конца срока меньше месяца, значит, продление где-то ломается. Первым делом стоит смотреть в /var/log/letsencrypt/letsencrypt.log.