NET::ERR_CERT_DATE_INVALID / Ваше подключение не защищено / Срок действия сертификата истёк
#Что произошло
Сертификат действует ограниченное время: Let's Encrypt — 90 дней, платные — обычно не более 398 дней. По истечении срока браузеры блокируют сайт предупреждением «Подключение не защищено». Автоматическое продление могло не сработать из-за остановки таймера certbot, изменения конфигурации, закрытого порта 80 для проверки, смены DNS или просроченной проверки домена. Исправляется выпуском нового сертификата и перезагрузкой веб-сервера.
#Причины неудачи
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не работает таймер certbotОтключен. | Нет записей о продлении. | Включите systemctl enable --now certbot.timer. |
| Порт 80 закрытФайрвол, редирект. | Ошибка проверки HTTP-01. | Откройте порт 80. |
| Домен указывает на другой серверСмена DNS. | Проверка не проходит. | Проверьте A-запись. |
| Веб-сервер не перезагруженСтарый сертификат в памяти. | Файл новый, сайт старый. | reload. |
| Неполная цепочкаНет промежуточного. | Работает в Chrome, ошибки в curl. | Используйте fullchain.pem. |
| Превышен лимит запросовМного попыток. | Rate limit. | Подождите, используйте staging для тестов. |
#Порядок для Let's Encrypt
- Проверьте, какой сертификат истёкНа компьютере с OpenSSL выполните
openssl s_client -connect пример-домена:443 -servername пример-доменаи просмотрите сертификат командойopenssl x509 -noout -dates -subjectчерез канал вывода. Убедитесь, что срок действительно истёк и сертификат относится к вашему имени: если TLS завершает CDN, его сертификат может отличаться от сертификата origin. - Проверьте работу Certbot и его расписанияНа сервере через SSH выполните
sudo certbot certificatesиsystemctl list-timers | grep -i certbotлибо проверьте cron, который использует ваша установка. Найдите строку с нужным доменом и путь к каталогу сертификата; если certbot не установлен, сначала определите, кто именно управляет сертификатами на этом сайте. - Выполните пробное и штатное продлениеДля управляемых Certbot сертификатов запустите
sudo certbot renew --dry-runи читайте ошибки. Только если тест успешен и срок требует продления, выполняйтеsudo certbot renew; команда может не обновить ещё не истекающий сертификат — это нормально. При ошибке проверки не повторяйте запросы многократно, чтобы не попасть под ограничения УЦ. - Проверьте DNS и способ проверки доменаПри ошибке HTTP-01 проверьте публичный DNS, доступность порта 80 и соответствующий webroot/прокси; при DNS-01 убедитесь, что TXT-запись проверки появилась на авторитетных NS. Для wildcard нужен DNS-01, обычный HTTP-01 его не подтверждает. Не размещайте открыто ключи API DNS-провайдера.
- Примените сертификат без перезагрузки системыУбедитесь, что веб-сервер использует новые пути fullchain/key, выполните
sudo nginx -tилиsudo apachectl configtestв зависимости от установленной службы. После успешного теста выполните reload только нужного веб-сервера; перезагружать всю ОС ради сертификата не нужно. - Проверьте сертификат снаружиПовторите внешнюю проверку OpenSSL с SNI и проверьте новый
notAfter, соответствие имени и цепочку. Откройте сайт с телефона через другую сеть, не отключая проверку TLS; если по-прежнему старый сертификат, проверьте, какой прокси/CDN принимает соединение. - Настройте контроль автоматического продленияНастройте штатный systemd timer/cron для Certbot и уведомление о скором истечении сертификата через мониторинг. Выполните будущую пробную проверку после изменения DNS или схемы прокси, а не ждите фактического прекращения HTTPS.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Для платных сертификатов
Если сертификат куплен у платного центра сертификации, зайдите в личный кабинет, перевыпустите (reissue) сертификат с тем же или новым CSR. Сформировать CSR и ключ можно командой openssl req -new -newkey rsa:2048 -nodes -keyout example.ru.key -out example.ru.csr. Установите сертификат вместе с промежуточными (цепочкой) в один файл fullchain.pem: сначала сертификат сайта, потом промежуточные.
#Мониторинг
Настройте уведомления: сервисы вроде UptimeRobot (https://uptimerobot.com/) проверяют срок сертификата и присылают письмо за 14 и 7 дней. Скрипт для проверки: openssl x509 -checkend 1209600 -noout вернёт код 1, если сертификат закончится менее чем через 14 дней; его можно запускать по cron и отправлять письмо.