Переходите с UptimeRobot? Импортируйте мониторы одним кликом по ключу API только для чтения.Начать бесплатно →
  1. Главная
  2. Блог
  3. Руководства

Срок действия SSL: как не пропустить продление

Автопродление ломается чаще, чем думают. Составьте список хостов, проверяйте срок одной строкой openssl и настройте оповещения за 30, 14 и 3 дня.

Руководства

Истечение сертификата — самый скучный сбой из существующих. Все знают, что это случится, это полностью предсказуемо, и всё же каждую неделю из-за него падают магазины, формы записи и почтовые серверы. Причина почти никогда не в том, что «никто не продлил». Причина в том, что «то, что должно было продлевать, остановилось, и нас никто не предупредил».

Шаги восстановления описаны в отдельной статье о том, что делать, если сертификат уже истёк. Эта статья о другой половине: узнавать достаточно рано, чтобы той статьи никогда не понадобилось.

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

Сертификаты Let’s Encrypt действуют 90 дней, а отрасль поэтапно переходит на более короткие сроки до 2029 года. Более короткие сроки означают больше продлений, а каждое продление — это шанс, что с прошлого раза что-то изменилось. Обычные причины:

  1. Не удаётся ответить на проверку. HTTP-01 требует доступного порта 80. Изменение брандмауэра, новое правило редиректа или CDN впереди ломают её.
  2. Переехал DNS. Имя теперь указывает на другой хост, а certbot на старом сервере продлевает сертификат, которого никто не видит.
  3. Исчез таймер. Пересборка сервера, миграция или смена пакета удалили запись cron или certbot.timer.
  4. Продлён, но не перезагружен. Новый файл лежит на диске; nginx, балансировщик или почтовый сервер всё ещё держат старый в памяти.
  5. Забытый хост. У api., staging., mail. и shop. часто свой сертификат и ничьё имя в задаче.
  6. Коммерческий сертификат, письмо о продлении которого уходит ушедшему сотруднику.
  7. Лимиты. Сломанный цикл повторов исчерпывает недельный лимит, и настоящее продление отклоняется.
Срок жизни сертификата и оповещения Шкала времени от дня выпуска сертификата до дня окончания срока. Автоматическое продление обычно происходит примерно за 30 дней до окончания. Оповещения срабатывают за 30, 14 и 3 дня до окончания. После окончания браузеры показывают предупреждение на весь экран. ВыпущенИстекает осталось 30 днейпервое оповещение 14 днейвторое оповещение 3 днядействуйте сегодня Всё в порядке. Автопродление идёт примерно за 30 дней до окончания.
Если автопродление работает, вы не увидите ни одного оповещения. Если нет, первое придёт с запасом в месяц.

Шаг 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 в месяц.