У каждого SSL/TLS-сертификата есть дата окончания. Когда она проходит, браузеры перестают доверять сайту и показывают посетителям страницу с предупреждением. Сам сайт при этом продолжает работать, поэтому проверки доступности (аптайма), которые лишь запрашивают код ответа, могут ничего не заметить. Истечение сертификата — одна из самых предотвратимых причин недоступности, и это руководство показывает, как его предотвратить.
Что делает SSL/TLS-сертификат
Когда браузер открывает адрес https://, сертификат выполняет две задачи:
- Подтверждает личность. Он говорит, что этот сервер уполномочен отвечать от имени этого доменного имени, и это подтверждает центр сертификации, которому доверяет браузер.
- Включает шифрование. Он содержит открытый ключ, с помощью которого браузер и сервер устанавливают шифрованное соединение.
Термин SSL устарел. Современные соединения используют TLS, но люди по-прежнему говорят «SSL-сертификат», и это руководство тоже.
В сертификате указаны дата начала (notBefore) и дата окончания (notAfter). За пределами этого окна он недействителен. Это определено в стандарте X.509, RFC 5280.
Почему важно истечение срока
Когда сертификат истекает:
- Браузеры показывают предупреждение на весь экран и затрудняют переход дальше.
- Поисковые роботы, платёжные провайдеры и клиенты API могут отказаться от соединения.
- Мобильные приложения и интеграции, которые обращаются к вашему серверу, могут отказать без какого-либо видимого сообщения.
- Посетители часто решают, что сайт взломан.
С сервером всё в порядке. Поэтому проблему легко пропустить, а настоящий ущерб она наносит быстро.
Как проверить срок действия сертификата
Любой публичный сайт можно проверить самому, без специальных инструментов.
В браузере
Точные названия пунктов меню отличаются в разных браузерах и версиях. В большинстве настольных браузеров:
- Откройте сайт.
- Нажмите значок слева от адресной строки (замок или значок соединения).
- Выберите пункт о соединении или сертификате и откройте сведения о сертификате.
- Прочитайте даты «Действителен с» и «Действителен по».
Через OpenSSL
В Linux и macOS OpenSSL обычно уже установлен. Эта команда подключается к сайту и выводит даты:
openssl s_client \
-connect example.com:443 \
-servername example.com \
</dev/null 2>/dev/null |
openssl x509 -noout -dates
Замените example.com на ваш домен. Результат выглядит так (даты здесь для примера):
notBefore=Sep 26 22:49:11 2026 GMT
notAfter=Dec 25 22:56:35 2026 GMT
Что делает каждая часть:
openssl s_client -connect example.com:443открывает TLS-соединение с портом 443 и выводит то, что присылает сервер.-servername example.comпередаёт имя хоста при рукопожатии (SNI, Server Name Indication). Многие серверы размещают несколько сайтов на одном адресе и по этому имени выбирают, какой сертификат предъявить. Без него вам могут показать сертификат другого сайта.</dev/nullсразу закрывает ввод, чтобы команда завершилась, а не ждала.2>/dev/nullскрывает сведения о соединении, которые выводятся в поток ошибок.openssl x509 -noout -datesчитает сертификат из канала и выводит только даты его начала и конца.
Чтобы задать вопрос с ответом «да» или «нет», используйте -checkend с числом секунд. Эта команда спрашивает, будет ли сертификат ещё действителен через 30 дней (2 592 000 секунд):
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null |
openssl x509 -noout -checkend 2592000
Если сертификат к этому сроку ещё будет действителен, команда выводит Certificate will not expire и завершается с кодом 0. Если к тому времени он истечёт, она завершается с ненулевым статусом. Это удобно использовать в скрипте.
Note
Эта команда показывает даты сертификата, который сервер предъявляет на этом порту. Это не полная проверка. Она не проверяет, полная ли цепочка, совпадает ли имя и стал бы ли браузер доверять результату. Она также ничего не говорит о том, доступен ли сам сайт.
Как работает продление сертификата
Сертификат нельзя продлить в буквальном смысле. Продление означает получение от центра сертификации нового сертификата для тех же имён, с новыми датами, и установку его туда, где сервер сможет им пользоваться.
Важны два шага, а помнят часто только первый:
- Выпуск. Центр сертификации проверяет, что вы управляете доменом, и выдаёт новый сертификат.
- Развёртывание. Новый сертификат и ключ помещаются туда, откуда их читает веб-сервер, и серверу сообщают, что их нужно загрузить.
Пока второй шаг не выполнен, сервер продолжает отдавать старый сертификат, и прежняя дата окончания остаётся в силе. Продлённый файл на диске — это ещё не продлённый сертификат в рабочей среде.
Автоматическое продление
Большинство центров сертификации теперь ожидают, что продление автоматизировано. Например, Let's Encrypt по умолчанию выпускает сертификаты на 90 дней, а в его руководстве по интеграции рекомендуется продлевать, когда остаётся примерно треть срока, чтобы неудачную попытку можно было повторить.
Типичные инструменты, такие как Certbot и ACME-клиенты, встроенные во многие панели хостинга и веб-серверы, делают это по расписанию. Они регулярно пытаются продлить сертификат, заменяют его файлы, когда подходит срок, и могут после этого выполнить команду, например перезагрузить веб-сервер.
Чем бы вы ни пользовались, настройте всё так, чтобы видеть, как это работает:
- Знайте, где оно запускается и как часто.
- Знайте, кого уведомят о сбое.
- Выполните пробный запуск, если инструмент это поддерживает. В Certbot есть
certbot renew --dry-run.
Сертификаты становятся короче
Сроки действия сертификатов сокращаются во всей отрасли, из-за чего ручное продление становится всё менее практичным:
- CA/Browser Forum, организация, которая устанавливает правила для публичных сертификатов, утвердила график, снижающий максимальный срок действия с 398 до 47 дней. Сертификаты, выпущенные 15 марта 2026 года или позже, могут действовать до 200 дней, с 15 марта 2027 года — до 100 дней, а с 15 марта 2029 года — до 47 дней.
- Let's Encrypt объявил, что его профиль по умолчанию перейдёт на 64 дня в феврале 2027 года и на 45 дней в феврале 2028 года.
Если вы продлеваете вручную раз в год, планируйте автоматизацию. Проверяйте актуальные правила вашего центра сертификации, потому что графики могут меняться.
Note
Let's Encrypt больше не отправляет письма-напоминания об окончании срока. Если вы рассчитывали на них как на страховку, вам нужен собственный монитор.
Почему автоматическое продление может сломаться
Автоматически не значит надёжно. Вот частые причины, по которым продление не срабатывает так, что никто не замечает:
- Задача по расписанию остановилась. Сервер пересобрали, таймер потерялся или задачу так и не включили.
- Не проходит проверка домена. Центр сертификации должен достучаться до вашего сайта или DNS-записей, чтобы подтвердить, что домен под вашим контролем. Изменённый файрвол, перенесённая DNS-зона, перенаправление, которое теперь перехватывает проверочное задание, или CDN впереди могут это сломать.
- Новый сертификат не загружен. Файл заменён, но веб-сервер так и не перезагрузили, поэтому он держит в памяти старый.
- Сертификат хранит другой сервер. Балансировщик нагрузки, CDN или второй хост отдают собственную копию, которую не обновляет ни одна задача.
- Имя добавили или убрали. Сертификат больше не покрывает все используемые имена хостов.
- Истекла учётная запись или учётные данные. Отозван токен API для проверки через DNS или недействителен контактный адрес почты в учётной записи.
- Ограничения частоты или изменения у центра сертификации. Слишком много попыток или изменение правил издателя могут привести к отказу.
Второе и третье встречаются на практике чаще всего, и ни то ни другое не видно по датам сертификата, пока не станет слишком поздно.
Цепочки сертификатов и проблемы развёртывания
Сервер должен отправлять собственный (листовой) сертификат и промежуточные сертификаты, которые связывают его с доверенным корневым. Если промежуточного нет, одни клиенты всё равно построят путь, а другие нет. Тогда сайт нормально выглядит в вашем браузере и не работает в приложении, в утилите командной строки или на старом телефоне.
Признаки этой проблемы:
- Сайт работает в настольном браузере, но не открывается через
curlили из скрипта. openssl s_clientзаканчивает сообщением о невозможности проверить первый сертификат.- Жалуются только некоторые устройства.
Чтобы посмотреть цепочку, которую отправляет сервер, добавьте -showcerts:
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
В конце вывода найдите строку, начинающуюся с Verify return code. Значение 0 (ok) означает, что OpenSSL смог построить доверенный путь.
Другие ошибки развёртывания, которые стоит поискать: сертификат и ключ не совпадают, на одном из нескольких серверов отдаётся старый сертификат, к сайту обращаются по имени, которого нет в сертификате.
Следите за сроком действия сертификата
Даже при автоматизации слежение за датой окончания служит страховкой. Оно ловит все перечисленные сбои, потому что смотрит на то, что отдаётся, а не на то, что должно отдаваться.
Хорошая проверка срока:
- Читает сертификат, который получают посетители, на настоящем адресе.
- Предупреждает достаточно рано, чтобы успеть, с запасом в несколько дней, а не часов.
- Предупреждает человека, который может это исправить.
- Предупреждает снова, если проблема не устранена, или хотя бы не даёт предупреждению потеряться.
В UptimeWire
Для каждого сайта, адрес которого начинается с https://, UptimeWire проверяет сертификат отдельно от проверки доступности. Вот как это работает:
- Своё расписание. Проверки сертификата выполняются раз в несколько часов по собственному расписанию, а не с интервалом проверки доступности. Поэтому предупреждение может прийти через несколько часов после пересечения порога, а не в тот же момент.
- Запас по времени для предупреждения. Вы выбираете, за сколько дней до окончания срока вас предупреждать. По умолчанию — за 30 дней, и настройка задаётся для каждого сайта. Предупреждение отправляется, когда до окончания срока сертификата остаётся меньше этого числа дней.
- Отправляется один раз. Предупреждение отправляется, когда проверка переходит в состояние предупреждения, а не при каждой последующей проверке.
- Недействительные сертификаты. Если сертификат вообще нельзя проверить (например, он истёк или выдан на другое имя), вас предупреждают сразу, не дожидаясь порога.
- Каналы. Предупреждения о сертификате приходят по почте и в Telegram, если вы его подключили. Каналы чатов и вебхуков их не передают.
UptimeWire не продлевает и не заменяет сертификаты. Он сообщает, что пора действовать.
Important
Мониторинг не заменяет продление. Предупреждение, которое никто не читает или которое уходит в канал, не передающий его, ничего не защищает. Убедитесь, что адрес почты — тот, который кто-то проверяет.
Что делать, когда сертификат истёк
- Подтвердите это. Проверьте даты в браузере или командой OpenSSL выше на настоящем адресе.
- Найдите, где отдаётся сертификат. Это может быть ваш веб-сервер, балансировщик нагрузки, CDN или панель хостинга.
- Продлите его. Запустите инструмент продления или запросите новый сертификат у вашего центра сертификации. Если автоматика не сработала, прочитайте её журнал, чтобы узнать почему.
- Разверните его. Установите новый сертификат и перезагрузите службу, которая его отдаёт.
- Проверьте снова снаружи. Прочитайте даты на рабочем адресе и проверьте цепочку.
- Найдите причину. Исправьте то, из-за чего не сработала автоматика, иначе то же самое случится при следующем продлении.
- Сообщите людям, если нужно. Если клиенты увидели предупреждение, стоит дать короткое сообщение на странице статуса или по почте.
Чек-лист профилактики
- Все публичные имена хостов перечислены, с указанием сертификата, который их покрывает, и места, где он отдаётся.
- Продление автоматическое, и вы знаете, где оно запускается.
- Кто-то получает сообщение о сбое задачи продления.
- Веб-сервер перезагружается после замены сертификата.
- Цепочка полная (
Verify return code: 0 (ok)). - Дата окончания отслеживается снаружи с запасом для предупреждения не меньше двух недель.
- Предупреждающее письмо приходит в ящик, который читает человек.
- Вы проверяете даты после любой смены сервера, CDN или хостинга.
- Регистрация домена и DNS тоже отслеживаются, потому что они ломаются так же тихо. См. Полное руководство по мониторингу доступности сайта.
С другой стороны проблемы — как заметить, что сайт недоступен по любой причине, — читайте в статье Как следить за доступностью сайта.