Просроченный SSL-сертификат: как исправить ошибку NET::ERR_CERT_DATE_INVALID
Просроченный SSL-сертификат: как исправить ошибку NET::ERR_CERT_DATE_INVALID
Просроченный проверку SSL — одна из самых частых и болезненных причин недоступности сайта: браузер показывает красный экран «Ваше подключение не защищено» (NET::ERR_CERT_DATE_INVALID), и пользователи уходят. Обычно это происходит в нерабочее время и обнаруживается только через часы. В этой статье разберём, как за 10 минут диагностировать проблему, выпустить новый сертификат и настроить мониторинг сайтов, чтобы это не повторилось.
Как понять, что сертификат действительно просрочен
Прежде чем паниковать и перевыпускать сертификат, нужно убедиться, что проблема именно в сроке действия, а не в неправильной системной дате клиента или в кешированной цепочке. Самый быстрый способ — запросить сертификат напрямую с сервера через openssl:
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null \
| openssl x509 -noout -dates
# notBefore=Jan 1 00:00:00 2025 GMT
# notAfter=Apr 1 00:00:00 2025 GMT
Если notAfter уже в прошлом — сертификат действительно просрочен. Альтернативно можно воспользоваться бесплатным SSL Checker от enterno.io: он покажет срок действия, цепочку и возможные проблемы в одном отчёте. Если срок ещё не истёк, а ошибка сохраняется, проверьте системное время на клиенте и посмотрите, не подставляет ли сервер старый сертификат из кеша Nginx или CDN.
Что происходит в браузере: коды ошибок и поведение
Разные браузеры показывают просроченный сертификат по-разному, но суть одна: TLS-рукопожатие завершается предупреждением, и пользователь либо видит кнопку «Продолжить (небезопасно)», либо вообще теряет возможность зайти (например, при включённом HSTS). Типичные коды ошибок:
- Chrome/Edge:
NET::ERR_CERT_DATE_INVALID - Firefox:
SEC_ERROR_EXPIRED_CERTIFICATEилиMOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE - Safari: «Не удаётся установить безопасное соединение»
- curl:
SSL certificate problem: certificate has expired
Важный нюанс: если включён HSTS с preload, пользователь вообще не сможет пройти на сайт — это сделано специально, чтобы защитить от MITM. Подробнее о настройке HSTS мы писали в статье «HSTS и preload-лист: полное руководство».
Быстрое решение: выпуск нового сертификата через Let's Encrypt
Для большинства сайтов лучшее решение — бесплатный сертификат Let's Encrypt с автоматическим обновлением. Если у вас уже установлен certbot, выпуск занимает 30 секунд:
# Остановить nginx (если используется standalone-режим)
sudo systemctl stop nginx
# Выпустить новый сертификат
sudo certbot certonly --standalone -d example.com -d www.example.com
# Либо без остановки через webroot
sudo certbot certonly --webroot -w /var/www/html -d example.com
# Запустить nginx
sudo systemctl start nginx
После успешного выпуска сертификат будет лежать в /etc/letsencrypt/live/example.com/. Убедитесь, что nginx указывает на правильные пути:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Полный пошаговый гайд по настройке Let's Encrypt — в статье «Бесплатный SSL через Let's Encrypt: установка certbot».
Если сертификат коммерческий и нужно продлить срочно
Для платных сертификатов (DigiCert, Sectigo, GlobalSign) алгоритм другой: зайдите в панель CA, найдите истёкший сертификат и запустите процедуру renewal. Обычно нужно сгенерировать новый CSR и пройти валидацию (DNS, email или HTTP). После получения архива распакуйте его и замените fullchain.pem и ключ на сервере. Не забудьте перезагрузить веб-сервер:
sudo nginx -t && sudo systemctl reload nginx
Если срочно нужно поднять сайт и нет возможности пройти валидацию CA за разумное время, временно выпустите Let's Encrypt — его валидация занимает минуты, а потом спокойно вернётесь к коммерческому сертификату.
Как не допустить повторения: мониторинг срока действия
Главная причина просрочки — забытый ручной renewal. Решений три:
- Автообновление certbot: cron-задача
0 */12 * * * certbot renew --quietобновит сертификат за 30 дней до истечения. - Внешний мониторинг: сервисы типа Enterno.io Monitors проверяют срок действия каждые 5 минут и присылают алерт в Telegram/Email/Slack за 14, 7 и 3 дня до истечения.
- Скрипт на сервере: простой bash, который парсит
openssl x509и отправляет уведомление при < 14 дней до истечения.
Рекомендуем комбинацию: автообновление + внешний мониторинг. Cron может молча сломаться (закончилось место, упал DNS), а внешний монитор это сразу заметит.
Дополнительные проверки после перевыпуска
После установки нового сертификата проверьте:
- Цепочка не оборвана (как чинить incomplete chain).
- Сертификат покрывает и apex-домен (
example.com), иwww, и все нужные поддомены. - Используются современные cipher suites (см. слабые cipher suites).
- OCSP stapling включён — ускоряет валидацию в браузере.
Часто задаваемые вопросы
Можно ли продолжать пользоваться сайтом с просроченным сертификатом?
Технически да — пользователь может нажать «Продолжить небезопасно». Практически нет: Google пессимизирует такие сайты в поиске, Chrome показывает полностраничное предупреждение, а при включённом HSTS обход вообще невозможен.
Сертификат истёк, но новый сайт грузится быстро — почему?
Скорее всего кешируется старый сертификат — в браузере, на CDN (Cloudflare, Fastly) или в промежуточном прокси. Очистите кеш CDN и проверьте через openssl s_client с вашего сервера.
Сколько действует сертификат Let's Encrypt?
90 дней. Certbot автоматически обновляет его за 30 дней до истечения, если крон настроен. С 2024 года CA/Browser Forum рассматривает сокращение максимального срока до 47 дней — автоматизация станет обязательной.
Что делать, если сертификат отозван, а не просрочен?
Ошибка будет другая: NET::ERR_CERT_REVOKED. Отзыв обычно связан со скомпрометированным ключом — в этом случае обязательно сгенерируйте новый ключ и новый CSR, старый ключ использовать нельзя.
Заключение
Просроченный SSL — проблема, которая решается за 10 минут, если есть certbot, и за 2 часа, если нужно проходить валидацию коммерческого CA. Главное — не допускать повторения: настройте автообновление и подключите внешний мониторинг. SSL Checker от enterno.io покажет срок действия, целостность цепочки и оценку конфигурации за 15 секунд — проверьте свой сайт прямо сейчас, а Monitors автоматически предупредит за 14 дней до следующего истечения.
Спецификация TLS 1.2 — RFC 5246, TLS 1.3 — RFC 8446. Аудит сертификата онлайн — SSL Labs и Mozilla Observatory. Документация Let's Encrypt — letsencrypt.org/docs.
Проверьте ваш сайт прямо сейчас
Проверить →