UptimeChecker

Истёк SSL-сертификат — что делать

Обложка: Истёк 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 без явного согласия пользователя.

Ошибка истёкшего SSL-сертификата в браузере

Важно отличать истечение от других ошибок сертификата, потому что лечение у них разное:

Ошибка Что это Решается
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 после установки
  • Подключил напоминания об истечении, чтобы не повторилось

Связанные статьи


Истёкший сертификат — это не катастрофа, а сбой процесса. Починить его можно за полчаса; сделать так, чтобы он не повторился, — за подключение мониторинга. Если сайтов у вас или у клиентов больше одного, держите сроки SSL под автоматическим контролем — и красный экран браузера останется чужим опытом.