PingMap

Срок действия SSL-сертификата

Срок действия SSL-сертификата — это период между датами NotBefore и NotAfter в X.509: до NotAfter браузеры считают сертификат валидным, после — блокируют сайт. Инструмент бесплатно показывает, сколько дней осталось, точную дату окончания и индикатор риска. Для постоянного контроля добавьте сайт в личном кабинете и задайте порог предупреждения о скором истечении сертификата.

Нужна полная проверка SSL (издатель, цепочка доверия, версия TLS, длина ключа)? Используйте полную проверку SSL-сертификата — комплексный инструмент с разбором всего сертификата.

Что происходит ровно в момент истечения

Истечение сертификата — это не плавная деградация, а резкая отсечка по часу UTC. До 23:59:59 предыдущего дня сертификат считается валидным, в 00:00:00 следующего — невалидным. Никаких grace-периодов:

T+0 — браузеры показывают NET::ERR_CERT_DATE_INVALID

Chrome, Firefox, Safari блокируют переход. Пользователь видит красный экран "Подключение не защищено" с кнопкой "Назад в безопасность". Кнопка "Перейти всё равно" есть, но требует 3 клика и большинство закрывает вкладку.

T+0 — API падает с TLS handshake error

Все интеграции через HTTPS перестают работать одновременно: webhook-получатели, мобильные приложения, чат-боты, IoT-устройства, cron-задачи на curl. Сообщение от клиента: "после полуночи всё легло".

T+24h — падают первые позиции в SEO

Googlebot за сутки успевает многократно поймать ошибку HTTPS. Сайт начинает падать в выдаче. После восстановления сертификата позиции не возвращаются сразу — нужны недели на переоценку.

T+72h — HSTS preload становится проблемой

Если домен в HSTS preload-листе браузеров, пользователи не могут обойти ошибку даже через "Перейти всё равно" — браузер заблокирует полностью. Восстановление требует валидного сертификата + времени на распространение TLS-сессий.

Почему автопродление иногда не срабатывает

У 80% сайтов на 2026 год стоит Let's Encrypt с 90-дневным сертификатом и автопродление через certbot/acme.sh. Тем не менее сертификаты регулярно истекают. Реальные причины из инцидентов:

  • HTTP-01 challenge не проходит — редирект всего трафика на HTTPS, теперь Let's Encrypt не может верифицировать домен через /.well-known/acme-challenge/. Решение: либо исключить путь из редиректа, либо переключиться на DNS-01.
  • Сменился IP сервера — DNS ещё не пропагировался, Let's Encrypt видит старый IP без нужного веб-сервера. Challenge fail.
  • Cron не запущен или systemd-timer выключен — проверьте systemctl status certbot.timer и cat /var/log/letsencrypt/letsencrypt.log.
  • Превышен Let's Encrypt rate limit — 50 сертификатов в неделю на основной домен, 5 дубликатов за 7 дней. Бьются shared-хостинги с одного IP.
  • Cloudflare/CDN перехватывает challenge — если в Cloudflare включен Always Use HTTPS + Origin Cert, прямой Let's Encrypt на origin не пройдёт. Используйте Cloudflare API + DNS-01 или отключите перехват для /.well-known/.
  • Поменялась структура webroot — developer перенёс nginx-config, certbot пишет в старый webroot, web-сервер читает из нового. Challenge "не находится".

Recovery: что делать прямо сейчас, если уже истёк

Время каждой минуты на счету — пользователи уже видят красные экраны. Быстрая последовательность:

  1. 1. Выпустите новый сертификат немедленно.
    sudo certbot certonly --standalone -d example.com --force-renewal
    Если 80 порт занят nginx — остановите его на 30 секунд или используйте --webroot. Один сертификат выписывается за 30-60 секунд.
  2. 2. Перезапустите веб-сервер.
    sudo nginx -s reload  # или  sudo systemctl reload nginx
    Без reload nginx продолжит отдавать старый сертификат из памяти. Проверьте через echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates.
  3. 3. Очистите DNS-кэш CDN. Если перед сервером стоит Cloudflare/AWS CloudFront — они кэшируют TLS-сессии. Зайдите в панель CDN, сделайте Purge Everything или включите Development Mode на 3 часа.
  4. 4. Сообщите пользователям. Если у вас есть статус-страница — разместите инцидент. Если нет — хотя бы напишите в Telegram-канал и в твиттер. Пользователи прощают сбой если видят что вы реагируете.
  5. 5. Сразу настройте мониторинг. Чтобы это не повторилось через 90 дней — подключите автоматические напоминания за 30/14/7 дней до следующего истечения.

Альтернативные способы проверить срок через CLI

Если нужна автоматизация или вы предпочитаете командную строку — три рабочих способа:

openssl

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -enddate

Выведет: notAfter=Aug 22 12:00:00 2026 GMT

curl + jq (через crt.sh API)

curl -s "https://crt.sh/?q=example.com&output=json" \
  | jq '.[0].not_after'

Полезно когда сервер не отвечает — crt.sh знает все выпущенные сертификаты из Certificate Transparency Logs.

Python one-liner

python -c "import ssl, socket; from datetime import datetime; \
ctx = ssl.create_default_context(); s = ctx.wrap_socket(socket.socket(), server_hostname='example.com'); \
s.connect(('example.com', 443)); print(s.getpeercert()['notAfter'])"

Без установки openssl, работает везде где есть Python 3.

Какие пороги уведомлений действительно работают

Из практики реагирования на SSL-инциденты вывели три порога. Меньше — пропускаешь, больше — становится шумом и теряет ценность:

30 дн
Запланируйте
Достаточно времени чтобы найти причину неработающего автопродления, договориться с админом, протестировать на staging.
14 дн
Действуйте
Если до сих пор не продлили — это уже инцидент в очереди. Заведите тикет с deadline, эскалируйте если нужно.
7 дн
Critical
Бросьте все остальные задачи. Если автопродление не завелось за неделю — значит сломан фундамент. Делайте вручную сейчас.

Часто задаваемые вопросы

За сколько дней до истечения нужно начинать беспокоиться?
За 30 дней — установите напоминание о продлении. За 14 дней — проверьте, что автопродление сработало. За 7 дней — критично, нужно действовать вручную, иначе сайт упадёт у пользователей.
Что произойдёт, если SSL истечёт?
Браузер может показать предупреждение о небезопасном соединении, а API-клиент отклонить запрос из-за ошибки TLS. Доступность зависит от того, проверяет ли клиент сертификат. Продлите его до истечения срока.
Можно ли отложить истечение, если сертификат уже просрочен?
Нет. После истечения сертификат становится невалидным мгновенно. Единственный путь — выпустить новый сертификат через Let's Encrypt, ваш CA или панель хостинга. Обычно это занимает 1–5 минут.
Почему сертификат истёк, если стоит auto-renew?
Частые причины: HTTP-challenge не проходит из-за редиректа, истёк токен ACME, упал cron-демон, недостаточно прав на запись в /etc/letsencrypt, или хостинг блокирует Let's Encrypt валидаторы. Проверьте логи certbot/acme.sh.
Сколько всего проверок SSL в месяц можно сделать бесплатно?
Разовая проверка бесплатна и не требует регистрации. На Free доступно до 3 проверок всего, включая SSL. Минимальный интервал обычных проверок составляет 5 минут.

Настройте автонапоминания за 30/14/7 дней — следующий сертификат точно не упустите.