Обычно звонит клиент: «Сайт пишет, что он небезопасен». Каждый браузер показывает предупреждение на весь экран, пройти дальше никто не может, а магазин не получил ни одного заказа с полуночи. Просроченный сертификат — это полный сбой с пугающим сообщением.
Вот порядок действий. Первая часть возвращает сайт к жизни. Вторая гарантирует, что такого разговора у вас больше не будет.
Минута 0: убедитесь, что это действительно срок действия
Выполните на любой машине:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates -issuer
Вы получите notBefore, notAfter и издателя. Если notAfter в прошлом, это срок действия. Если даты нормальные, но браузеры всё равно жалуются, перейдите к разделу о цепочке ниже: проблема в пропущенном промежуточном сертификате или несовпадении имени хоста, а не в сроке действия.
Проверьте также, стоит ли сайт за Cloudflare или другим прокси. Если Cloudflare работает в режиме SSL «Full», посетители видят сертификат Cloudflare, и он обновляется сам. Просроченный сертификат стоит на origin-сервере; исправление то же, но не такое срочное. Если нужно выиграть время, на час переключите Cloudflare с «Full (strict)» на «Full».
Минута 2: выясните, как выпущен сертификат
Посмотрите на издателя в результате команды выше.
- Let’s Encrypt (R10, R11, E5, E6 и т. п.): что-то автоматизированное должно было его обновить и не обновило. Зайдите на сервер и найдите клиент:
certbot,acme.sh, Caddy, Traefik, AutoSSL в cPanel или панель хостинга. - Коммерческий УЦ (DigiCert, Sectigo, GlobalSign): кто-то купил его год назад, а письмо о продлении ушло в ящик, который никто не читает. Нужно купить или продлить сертификат и установить вручную.
- Управляемый хостингом (Kinsta, WP Engine, Cloudways, SiteGround): откройте их панель; обычно там есть кнопка «обновить» или «перевыпустить», а поддержка может сделать это принудительно.
Минута 5: продление через Let’s Encrypt
На сервере с certbot:
sudo certbot renew --force-renewal
sudo systemctl reload nginx # or apache2
Если не получилось, прочитайте ошибку. Типичные причины:
- Изменился DNS. Домен теперь указывает на Cloudflare или новый хост, и проверка HTTP-01 попадает не на тот сервер. Воспользуйтесь проверкой DNS-01 или запустите certbot там, куда действительно приходит трафик.
- Закрыт порт 80. Для HTTP-01 порт 80 должен быть открыт из интернета. Добросовестное изменение в файрволе это сломало.
- Превышен лимит запросов. Let’s Encrypt разрешает 5 дубликатов сертификата в неделю. Если сломанный cron повторял попытки несколько дней, вы упёрлись в этот лимит. Подождите или выпустите сертификат для немного другого набора имён (добавьте
www.). - Пропал cron или таймер systemd.
systemctl list-timers | grep certbotдолжен показать таймер. Если его нет, выполнитеsudo systemctl enable --now certbot.timer.
В Caddy или Traefik перезапустите службу и прочитайте журнал: они обновляют сертификаты при запуске.
Минута 10: продление коммерческого сертификата
Войдите в кабинет УЦ, продлите сертификат и сгенерируйте на сервере новый CSR:
openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
Пройдите подтверждение владения (e-mail или DNS), скачайте сертификат и пакет промежуточных сертификатов, установите оба и перезагрузите веб-сервер. Не пропускайте пакет: из-за этого получается сертификат, который работает в Chrome на вашем компьютере и не работает на Android.
Минута 15: проверьте цепочку, а не только даты
echo | openssl s_client -servername example.com -connect example.com:443 -showcerts 2>/dev/null | grep -E "s:|i:"
Вы должны увидеть конечный сертификат, затем один-два промежуточных и корневой, которому доверяет клиент. «unable to get local issuer certificate» означает, что не хватает промежуточного сертификата. Проверьте со второго устройства через мобильный интернет: корпоративные сети кешируют сертификаты так, что проблемы скрываются.
Затем откройте сайт в приватном окне. Если предупреждение исчезло, сообщите клиенту и запишите, что сломалось.
Чтобы это не повторилось: три уровня защиты
1. Почините автоматизацию. Какой бы механизм продления ни подвёл, сделайте так, чтобы он сбоил громко. В certbot добавьте --deploy-hook, который при успехе пингует адрес heartbeat-монитора: тогда тишина будет означать проблему. В панели хостинга включите их письмо о сроке действия и направьте его в общий почтовый ящик.
2. Отслеживайте срок действия снаружи. Автоматизация молча ломается чаще, чем думают. Внешний SSL-монитор читает сертификат, который видят ваши посетители, и оповещает за 30, 14 и 3 дня до окончания срока действия. В Tenium это один SSL-монитор на имя хоста (проверки SSL и срока действия домена доступны с тарифа Starter за $7 в месяц), а каждый https-монитор записывает срок действия в рамках обычной проверки. Оповещения приходят в Telegram или на e-mail, а страница статуса клиента показывает, что с сертификатом всё в порядке.
3. Внесите это в отчёт для клиента. Строка «Сертификат SSL: действителен, осталось 61 день» в ежемесячном отчёте даёт клиенту ощущение заботы, а вас заставляет раз в месяц проверять это без лишних раздумий.
О сертификатах на 90 и 47 дней
Индустрия переходит на более короткие сроки действия сертификатов. Сейчас у Let’s Encrypt это 90 дней, а CA/Browser Forum согласовал путь к сертификатам на 47 дней к 2029 году. Из-за этого автоматизация становится обязательной, а внешний мониторинг — единственной разумной страховкой: если продление сломается, у вас есть дни, а не месяцы, прежде чем посетители увидят предупреждение. Настройте его сейчас, пока память о последнем сбое свежа.
Как работают проверки, читайте на странице мониторинга SSL, а посмотреть любой сертификат прямо сейчас можно с помощью бесплатного SSL-чекера.
Читайте также
Смотрите также мониторинг срока действия домена, инструмент DNS-запросов и инструмент для HTTP-заголовков, чтобы проверить, что на самом деле получает посетитель, а также сравнение Tenium с Pingdom, если проверки сертификатов влияют на выбор поставщика. Магазинам, которые не могут позволить себе просроченный сертификат, стоит прочитать о мониторинге для интернет-магазинов.
Читайте также
Связанные страницы Tenium
Начните следить за первым сайтом бесплатно
30 мониторов бесплатно, проверки из 2 регионов, без банковской карты. Проверка SSL и срока действия домена — от $7 в месяц.