Мониторинг срока действия SSL-сертификатов

Обновлено 3 ноября 2026

Истёкший сертификат кладёт сайт не хуже упавшего сервера: браузеры показывают предупреждение на всю страницу, API-клиенты отказываются подключаться, мобильные приложения ломаются. Автоматическое продление сделало это реже, но не невозможным. Задачи продления ломаются молча, а сертификаты становятся всё короче. Разберём, как проверить срок, понять, почему продление остановилось, и получать предупреждение за несколько дней до проблемы.

Почему это важнее с каждым годом

Когда истекает сертификат

С любой машины с OpenSSL, для сертификата, который сайт отдаёт на самом деле:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -enddate -issuer -subject

На сервере с certbot, для сертификатов, которыми он управляет:

sudo certbot certificates

Если даты расходятся, certbot продлил сертификат, а веб-сервер всё ещё отдаёт старый.

Почему автопродление останавливается

Проверьте продление, ничего не меняя:

sudo certbot renew --dry-run

Перезагружайте веб-сервер после продления

Deploy-хук выполняется, только когда сертификат действительно продлён:

sudo certbot renew --deploy-hook "systemctl reload nginx"

Чтобы это работало всегда, положите скрипт в /etc/letsencrypt/renewal-hooks/deploy/. certbot запускает каждый исполняемый файл оттуда после каждого успешного продления.

Следите за задачей продления

certbot завершается с кодом 0, когда продлевать ещё нечего, поэтому пинг после него значит «задача отработала, ошибок нет». Если в системе работает таймер certbot, добавьте пинг в его сервис командой sudo systemctl edit certbot.service:

[Service]
ExecStartPost=/usr/bin/curl -fsS -m 10 --retry 3 -o /dev/null https://ping.heartcron.com/<uuid>

Или в обычном cron вместо таймера:

17 */12 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx" && curl -fsS -m 10 --retry 3 -o /dev/null https://ping.heartcron.com/<uuid>

Задайте проверке период 12 часов и запас в несколько часов. Если задача пропадёт или certbot начнёт падать, вы узнаете об этом за недели до истечения сертификата, а не в тот же день. Как сразу сообщать об ошибках через OnFailure, рассказано в руководстве мониторинг таймеров systemd.

Следите за самим сертификатом

Успешная задача ещё не доказывает, что сайт отдаёт свежий сертификат: может не хватать перезагрузки, или сертификат отдаёт CDN либо балансировщик, который вы не продлеваете сами. Поэтому проверяйте и снаружи. Добавьте в Heartcron SSL-проверку для хоста и выберите, за сколько дней предупреждать, например за 14. Heartcron подключается к сайту так же, как браузер, и присылает алерт, когда отдаваемый сертификат скоро истечёт или уже недействителен.

Заведите проверку для каждого имени со своим сертификатом: example.com, api.example.com, почтовый сервер, статус-страница на своём домене. Заодно проверка домена предупредит до окончания регистрации самого домена — а это кладёт сразу всё.

Другие руководства