Истечение сертификата — самый скучный сбой из существующих. Все знают, что это случится, это полностью предсказуемо, и всё же каждую неделю из-за него падают магазины, формы записи и почтовые серверы. Причина почти никогда не в том, что «никто не продлил». Причина в том, что «то, что должно было продлевать, остановилось, и нас никто не предупредил».
Шаги восстановления описаны в отдельной статье о том, что делать, если сертификат уже истёк. Эта статья о другой половине: узнавать достаточно рано, чтобы той статьи никогда не понадобилось.
Почему продление ломается
Сертификаты Let’s Encrypt действуют 90 дней, а отрасль поэтапно переходит на более короткие сроки до 2029 года. Более короткие сроки означают больше продлений, а каждое продление — это шанс, что с прошлого раза что-то изменилось. Обычные причины:
- Не удаётся ответить на проверку. HTTP-01 требует доступного порта 80. Изменение брандмауэра, новое правило редиректа или CDN впереди ломают её.
- Переехал DNS. Имя теперь указывает на другой хост, а certbot на старом сервере продлевает сертификат, которого никто не видит.
- Исчез таймер. Пересборка сервера, миграция или смена пакета удалили запись cron или
certbot.timer. - Продлён, но не перезагружен. Новый файл лежит на диске; nginx, балансировщик или почтовый сервер всё ещё держат старый в памяти.
- Забытый хост. У
api.,staging.,mail.иshop.часто свой сертификат и ничьё имя в задаче. - Коммерческий сертификат, письмо о продлении которого уходит ушедшему сотруднику.
- Лимиты. Сломанный цикл повторов исчерпывает недельный лимит, и настоящее продление отклоняется.
Шаг 1: составьте список хостов
Нельзя следить за тем, чего нет в списке. Для каждого клиентского домена соберите все хосты, на которых работает TLS: сайт, www, API, панель администратора, почтовый сервер, тестовый сайт, поддомен магазина.
Журналы прозрачности сертификатов публичны и находят забытые хосты. Эта команда выводит имена, для которых когда-либо выпускался сертификат в домене:
curl -s 'https://crt.sh/?q=%25.example.com&output=json' | jq -r '.[].name_value' | sort -u
Уберите имена, которых больше нет, и внесите оставшиеся в таблицу из трёх столбцов: хост, кто за него отвечает, как продлевается (certbot, панель хостинга, CDN, коммерческий УЦ).
Шаг 2: проверьте срок сами, одной строкой
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate
Для скрипта -checkend превращает проверку в «да» или «нет». Эта команда завершается с кодом 1, если сертификат истекает в течение 30 дней (2 592 000 секунд):
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -checkend 2592000
Пройдите по своему списку циклом:
for h in example.com www.example.com api.example.com; do
echo | openssl s_client -servername "$h" -connect "$h:443" 2>/dev/null \
| openssl x509 -noout -checkend 2592000 > /dev/null || echo "RENEW SOON: $h"
done
Почта и другие службы с TLS — это отдельные сертификаты на отдельных портах. Для отправки почты по SMTP используйте -starttls smtp -connect mail.example.com:587, для IMAPS — -connect mail.example.com:993. Бесплатная проверка SSL показывает издателя, срок действия и корректность цепочки для любого HTTPS-хоста без установки чего-либо.
Задача cron, которая запускает этот цикл, лучше, чем ничего. Но она хуже монитора, потому что делит сервер, настройки почты и внимание с тем, за чем должна следить.
Шаг 3: пусть кто-то снаружи следит за сертификатом, который получают посетители
Внешний монитор подключается так же, как посетитель, с правильным именем сервера, и читает сертификат, который действительно отдаётся. Так ловится случай «продлён на диске, но не перезагружен», который пропускает проверка по файлу.
В Tenium мониторы срока действия SSL и домена доступны на тарифе Starter ($7 в месяц). Они оповещают за 30, 14 и 3 дня до окончания срока, а также о сертификате, который уже истёк, не пользуется доверием, самоподписан или не соответствует имени хоста. Каждая HTTPS-проверка к тому же записывает срок действия, который видит, поэтому дата есть на странице монитора и в ежемесячном отчёте.
Направляйте оповещение на контакт, который кто-то читает. Почта работает на всех тарифах; Telegram и Slack доступны со Starter. Для клиентского аккаунта оповещайте сначала себя, а клиента позже, чтобы успеть всё исправить до того, как он заметит.
Особые случаи, на которых ловятся
- Cloudflare и другие прокси. Посетители видят сертификат прокси, который продлевается сам. У origin свой сертификат, и он может истечь незаметно и вызвать ошибки 525 или 526. Следите за публичным именем и, если можете обратиться к origin напрямую, добавьте проверку и для него.
- Wildcard и сертификаты на несколько имён. Один сертификат на
*.example.comи голый домен — это одно продление для многих хостов. Всё равно следите за каждым важным хостом: при развёртывании один из них может остаться на старой копии. - Тестовый сайт с самоподписанным сертификатом. Не оповещайте о нём так, будто это рабочий сайт. Держите мониторы тестовых сайтов отдельно или не создавайте их вовсе.
- Внутренний удостоверяющий центр. Публичный монитор не может проверить частную цепочку; ожидайте результат «не пользуется доверием» и следите за такими именами изнутри сети.
- Почтовые порты и порты API. Сертификат на порту 465 или 993 истекает независимо от сайта, и первым признаком становится почта, которая перестаёт приходить. Такие порты проверяйте командой
openssl s_clientиз шага 2 или отдельным контролем у почтового провайдера.
Шаг 4: не забудьте про домен
Сертификат и домен — это два разных срока. Домен, срок которого истёк, уносит сайт, почту и сертификат одновременно, и первым признаком часто становится страница-заглушка регистратора. Проверьте дату инструментом срока действия домена, который читает реестр через RDAP, и следите за ней так же, как за сертификатами. Мониторинг домена в Tenium оповещает теми же шагами: за 30, 14 и 3 дня.
Для каждого домена, которым вы управляете:
- включите автопродление у регистратора и убедитесь, что карта в профиле действительна;
- направляйте письма регистратора на общий почтовый ящик, а не на человека;
- включите блокировку у регистратора, чтобы избежать случайных переносов;
- запишите, кто платит: агентство или клиент. Именно об этом спор после каждого просроченного домена.
Шаг 5: добавьте даты в отчёт для клиента
Строка в ежемесячном отчёте вроде «Сертификат SSL действителен, осталось 61 день; домен продлевается через 212 дней» делает две вещи. Клиент видит что-то конкретное за плату по плану сопровождения, а вы раз в месяц бросаете взгляд на даты. На тарифе Agency отчёт создаётся для каждого клиента; на Pro один отчёт под вашим брендом. См. отчёты для клиентов.
Чек-лист продления, который можно использовать повторно
- Все хосты внесены в список, включая почту и тестовые сайты
- У каждого хоста есть ответственный и известный способ продления
- Автопродление один раз проверено через
certbot renew --dry-runили аналог у хостинга - Хук перезагрузки, который перезапускает веб-сервер после продления
- Внешний монитор срока действия на каждом рабочем хосте
- Автопродление домена включено, способ оплаты актуален, письма регистратора идут на общий ящик
- Сроки действия внесены в ежемесячный отчёт
Если вы выбираете сервис в основном ради проверки сертификатов, сравнение Tenium и Oh Dear рассказывает об инструменте, построенном вокруг сертификатов и обхода битых ссылок, и указывает, в чём он сильнее.
Частые вопросы
За сколько дней нужно получать оповещение о сроке действия SSL?
Tenium предупреждает за 30, 14 и 3 дня до окончания срока. Тридцати дней достаточно, чтобы починить сломанное продление в рабочее время, 14 дней — вторая попытка, а 3 дня означают, что кто-то должен действовать сегодня. Срок действия домена проверяется теми же тремя шагами.
Мой сертификат продлевается автоматически. Нужен ли мне мониторинг?
Да. Автоматика ломается тихо: брандмауэр закрывает порт 80, DNS переезжает на другой хост, удаляется таймер, балансировщик не перезагружается. Мониторинг читает сертификат, который на самом деле получают ваши посетители, а это единственное, что имеет значение.
Охватывает ли мониторинг SSL и доменное имя?
Это два отдельных срока. Истечение сертификата не влияет на домен, а истёкший домен забирает с собой и сайт, и сертификат. Следите за обоими. Tenium проверяет срок действия домена через RDAP и оповещает теми же шагами: за 30, 14 и 3 дня.
На каком тарифе доступен мониторинг срока действия SSL и домена?
Мониторы срока действия SSL и домена доступны на тарифе Starter ($7 в месяц). На тарифе Free есть проверки HTTP, ключевых слов, ping и портов.
Можно ли проверить срок действия из командной строки?
Да. Запустите openssl s_client с параметром -servername, передайте вывод в openssl x509 и добавьте -checkend с числом секунд. Команда завершится с кодом 1, если сертификат истекает в этом окне, поэтому её легко использовать в скриптах.
Читайте также
Связанные страницы Tenium
Начните следить за первым сайтом бесплатно
30 мониторов бесплатно, проверки из 2 регионов, без банковской карты. Проверка SSL и срока действия домена — от $7 в месяц.