Истёк SSL-сертификат — что делать
Что такое SSL-сертификат и что значит «он истёк»
SSL/TLS-сертификат — это цифровой документ, который подтверждает, что домен действительно принадлежит тому, кто его предъявляет, и включает шифрование между браузером посетителя и сервером. Технически это связка из открытого ключа, сведений о владельце и подписи удостоверяющего центра.
У любого сертификата есть строго ограниченный срок действия — две даты:
notBefore— с какого момента сертификат начинает действовать;notAfter— до какого момента он валиден.
Когда системные часы на стороне клиента или сервера переваливают за notAfter, сертификат считается истёкшим. Браузер перестаёт доверять соединению и показывает предупреждение, а в худшем случае вообще не пускает на сайт.
Почему сроки такие короткие? После серии компрометаций удостоверяющих центров индустрия сознательно сократила максимальную валидность: сертификаты Let's Encrypt живут 90 дней, коммерческие — как правило год. Логика простая: чем короче жизнь ключа, тем меньше окно для его кражи и тем чаще инфраструктура вынуждена автоматически перевыпускаться. Побочный эффект — истечение стало происходить чаще, а значит, за ним нужно следить.
Что видит посетитель, когда сертификат истёк
В Chrome и Edge посетитель увидит красный экран с ошибкой NET::ERR_CERT_DATE_INVALID и подписью «Ваше подключение не защищено». В Firefox — предупреждение SEC_ERROR_EXPIRED_CERTIFICATE. В Safari формулировка отличается, но суть та же: браузер не даёт открыть сайт по HTTPS без явного согласия пользователя.

Важно отличать истечение от других ошибок сертификата, потому что лечение у них разное:
| Ошибка | Что это | Решается |
|---|---|---|
ERR_CERT_DATE_INVALID |
истёк срок действия | перевыпустить сертификат |
ERR_CERT_AUTHORITY_INVALID |
неизвестный или самоподписанный центр | установить цепочку доверия |
ERR_CERT_COMMON_NAME_INVALID |
сертификат на другой домен | выпустить под нужный домен |
ERR_SSL_PROTOCOL_ERROR |
проблема рукопожатия TLS | проверить конфиг сервера |
Последствия истечения серьёзнее, чем кажется:
- Оформление заказа падает. Платёжные системы и корзина работают только по валидному HTTPS — для интернет-магазина это прямая потеря выручки.
- Доверие уходит мгновенно. Красный экран браузера воспринимается как «сайт взломан», даже если с ним всё в порядке.
- Страдает SEO. Поисковый робот, наткнувшийся на невалидный сертификат, не может обойти страницы — индексация проседает ровно на время простоя.
- API и интеграции ломаются. Мобильное приложение, вебхуки и партнёрские сервисы часто отключают соединение при ошибке TLS, а не показывают предупреждение.
Как проверить, что сертификат истёк
Через браузер
Кликните по иконке замка в адресной строке → «Подробнее» / «Сертификат» → поле «Действителен до». Там будет дата notAfter. Если сегодня позже неё — сертификат истёк.
Этот способ хорош для разовой проверки своего сайта, но не масштабируется: на десяток клиентских доменов вручную не накликаешься.
Через openssl — с выводом, который стоит понимать
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates
Разберём команду по частям:
openssl s_client -connect example.com:443— открывает TLS-соединение с сайтом, как это делает браузер;-servername example.com— подставляет SNI, чтобы сервер отдал сертификат именно этого виртуального хоста (важно, когда на одном IP несколько доменов);openssl x509 -noout -dates— извлекает из полученного сертификата только даты.
Пример вывода:
notBefore=Jan 5 00:00:00 2026 GMT
notAfter=Apr 5 00:00:00 2026 GMT
Если текущая дата позже notAfter — сертификат истёк. Эта команда незаменима при диагностике: она показывает фактический сертификат, который сервер отдаёт прямо сейчас, а не тот, что лежит в файле.
Проверить сразу несколько доменов можно циклом:
for d in site1.ru site2.ru site3.ru; do
echo "== $d =="
echo | openssl s_client -connect "$d":443 -servername "$d" 2>/dev/null \
| openssl x509 -noout -dates
done
Через онлайн-проверку — за минуту и без консоли
Быстрее всего — проверка срока SSL на UptimeChecker: вставляете домен и получаете дату истечения, издателя и сколько дней осталось. Для одного домена этого достаточно, для постоянного контроля — мониторинг, о нём ниже.
Почему сертификат истёк: частые причины
Причина редко бывает экзотической — почти всегда это одна из пяти:
| Причина | Механизм | Как исправить |
|---|---|---|
| Let's Encrypt не продлился | сбой certbot renew, закрыт порт 80, неверный webroot |
запустить renew вручную, починить веб-сервер |
| Забыли вручную | коммерческий сертификат на год, никто не внёс в календарь | перевыпустить у центра, завести напоминание |
| Сменили сервер/хостинг | старый сертификат не перенесли или не перевыпустили под новый IP | выпустить заново, установить цепочку |
| Поменяли DNS/CDN | сертификат остался на старом адресе | перевыпустить под актуальную конфигурацию |
| Автопродление «молча» отвалилось | cron для certbot не запускается, письма с предупреждением ушли в спам | проверить cron и уведомления |
Отдельно стоит сказать про самый коварный случай — тихое отключение автопродления. Let's Encrypt рассчитан на автоматику, и когда certbot renew падает, сам по себе он не возобновится. Через 90 дней сайт просто перестаёт открываться, и узнаёте вы об этом от клиента.
Что делать прямо сейчас
Порядок действий — от быстрого к основательному. Не перескакивайте шаги: сначала факт, потом причина, потом перевыпуск.
Шаг 1. Подтвердите факт
Проверьте notAfter через openssl или онлайн-проверку выше. Убедитесь, что речь именно об истечении, а не о другой ошибке (см. таблицу ошибок выше) — это сэкономит часы.
Шаг 2. Определите тип сертификата
Это определяет дальнейший путь:
- Let's Encrypt (или другой ACME-центр) — перевыпуск автоматизирован, см. шаг 3.
- Коммерческий сертификат — перевыпуск через панель удостоверяющего центра, см. шаг 4.
Определить тип можно той же командой openssl, выведя издателя:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -issuer
Шаг 3. Let's Encrypt: перевыпустить через certbot
Сначала проверьте, почему продление не сработало — запустите в тестовом режиме:
sudo certbot renew --dry-run
--dry-run не меняет боевые сертификаты, но прогоняет весь сценарий и показывает, где он спотыкается. Частая причина — закрытый порт 80: ACME-валидация по HTTP приходит именно на него.
Если dry-run прошёл — продлеваем по-настоящему:
sudo certbot renew
sudo systemctl reload nginx
После перевыпуска обязательно перезагрузить веб-сервер (nginx/apache2/httpd) — иначе он продолжит отдавать старый сертификат из памяти.
Шаг 4. Коммерческий сертификат: перевыпуск у центра
Зайдите в панель удостоверяющего центра, найдите домен, сформируйте CSR (или используйте существующий ключ), получите новый сертификат и цепочку. Установите их на сервер:
sudo cp newcert.pem /etc/ssl/example.com.crt
sudo cp chain.pem /etc/ssl/example.com-chain.crt
sudo systemctl reload nginx
Точные пути зависят от конфигурации вашего веб-сервера — сверьтесь с ним.
Шаг 5. Проверьте после установки
Обязательно перепроверьте факт после перевыпуска — кеш браузера и CDN могут показывать старое:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -dates
Если notAfter сдвинулся вперёд — сервер отдаёт новый сертификат. Если нет — проверьте, что перезагрузили веб-сервер и что CDN/прокси не кеширует старую цепочку.
Как не допустить повторения
Ручная проверка дат в календаре не масштабируется, когда доменов больше двух-трёх. Правильный подход — автоматический контроль срока SSL:
- Напоминания заранее, за 30, 14 и 7 дней до истечения, чтобы оставалось время на перевыпуск;
- Контроль сразу всех доменов в одном месте, а не разрозненный Excel;
- Алерт при фактическом падении HTTPS, чтобы ловить не только истечение, но и сломанную цепочку.
Для агентств это принципиально: истёкший сертификат у клиента — это звонок «наш сайт взломали», и отвечать придётся вам. Проверить текущий статус можно через проверку SSL, а мониторинг SSL для клиентских сайтов закроет риск на постоянной основе.
Короткий чек-лист
- Подтвердил истечение по
notAfter(openssl или онлайн-проверка) - Исключил другие ошибки сертификата (не перепутал с
ERR_SSL_PROTOCOL_ERROR) - Определил тип сертификата (Let's Encrypt / коммерческий)
- Перевыпустил:
certbot renewили через панель центра - Перезагрузил веб-сервер
- Перепроверил
notAfterпосле установки - Подключил напоминания об истечении, чтобы не повторилось
Связанные статьи
- Let's Encrypt не продлился: чек-лист — когда автопродление падает молча;
- «Не удалось установить безопасное соединение» — если ошибка не про дату, а про рукопожатие.
Истёкший сертификат — это не катастрофа, а сбой процесса. Починить его можно за полчаса; сделать так, чтобы он не повторился, — за подключение мониторинга. Если сайтов у вас или у клиентов больше одного, держите сроки SSL под автоматическим контролем — и красный экран браузера останется чужим опытом.