Сертификат Let’s Encrypt не продлился автоматически и сайт начал показывать ошибку SSL: что проверить в первую очередь

Автор: | 29.10.2026

Ситуация неприятная и довольно типичная: еще вчера сайт открывался без предупреждений, а сегодня браузер встречает посетителя сообщением о проблеме с безопасным подключением. Чаще всего причина проста: срок действия сертификата истек, а автоматическое обновление не сработало. Для пользователя это выглядит как поломка сайта, хотя на деле уязвимость прячется в одном из звеньев цепочки, которая должна была сработать без участия человека.

У Let’s Encrypt короткий срок жизни сертификатов, и именно поэтому автоматизация здесь не роскошь, а необходимость. Если она дала сбой, важно не только продлить сертификат вручную, но и понять, почему механизм обновления промолчал. Иначе через несколько недель или месяцев история повторится снова.

Почему это происходит именно в автоматическом обновлении

Автоматическое продление у Let’s Encrypt обычно держится на двух вещах: корректной работе клиента, например certbot, и доступности сайта для проверки домена. Если один из этих элементов ломается, процесс обрывается. Иногда все выглядит нормально, потому что ошибки копятся тихо, а о себе напоминают только в день истечения срока.

Частая причина — не сам сертификат, а окружение вокруг него. Изменился путь к конфигурации, сломался cron, не хватает прав, закончился доступ к DNS, сервер недоступен извне по нужному порту. Даже банальная перезагрузка без проверки автозадачи может оставить сайт с просроченным SSL.

Если формулировать проще, сертификат не живет сам по себе. Он зависит от планировщика задач, веб-сервера, сетевых правил и того, как именно настроена проверка домена. Когда все это собрано в одну схему, любой мелкий сбой способен остановить продление.

«В большинстве инцидентов проблема не в сертификате, а в том, что кто-то один раз настроил автоматизацию и больше к ней не возвращался», — так обычно описывают подобные случаи системные администраторы.

«SSL-ошибка на сайте почти всегда видна пользователю первой, а вот причина лежит глубже: в задаче по расписанию, DNS или правах доступа», — отмечают инженеры, которые обслуживают веб-серверы.

Как быстро понять, что именно сломалось

Начинать стоит не с переустановки, а с проверки срока действия сертификата и логов клиента, который его обновляет. Это экономит время и сразу показывает направление поиска. Если сертификат уже просрочен, браузер реагирует предсказуемо, а дальше нужно выяснять, почему не сработал механизм продления.

На практике полезно проверить несколько вещей подряд: дату окончания сертификата, статус задачи обновления, наличие ошибок в логах certbot или аналогичного инструмента, а также конфигурацию веб-сервера. Иногда проблема заметна уже на первом шаге. Например, команда renew отрабатывает с ошибкой, а в журнале лежит сообщение о недоступности challenge-файла.

Удобно держать под рукой простой порядок проверки. Он не решает проблему сам, но быстро отделяет очевидные сбои от более сложных случаев.

Что проверить Что это показывает
Срок действия сертификата Истек он уже или нет
Логи certbot или acme-клиента Почему обновление не завершилось
cron или systemd timer Запускается ли автообновление по расписанию
Доступность порта 80 или DNS-проверка Может ли центр сертификации подтвердить домен
Конфигурация nginx или Apache Не мешает ли сервер выпуску или замене файла

Если нужно быстро понять, где именно затык, можно запустить проверку вручную. Для certbot это обычно команда dry-run, которая имитирует продление без изменения настоящего сертификата. Такой тест помогает увидеть ошибки до того, как домен снова останется без действующего SSL.

Что чаще всего ломает продление на реальном сервере

Самая обидная причина — задача обновления просто не выполняется. Такое бывает после переноса сервера, обновления системы или чистки cron. С виду все настроено, но нужная строка исчезла или сервис таймера оказался отключен. В итоге сертификат продолжает жить по старой дате, а сайт однажды перестает открываться безопасно.

Вторая частая история связана с правами и путями. Certbot может получать новый сертификат, но не суметь перезагрузить веб-сервер, если у него нет нужных прав. Или наоборот, файл обновился, а nginx по-прежнему отдает старую копию из другой директории. Тогда администратор видит на диске новый сертификат, а браузер пользователя продолжает ругаться.

Еще одна причина — проверка домена через HTTP-01, когда центр сертификации должен попасть на сайт по порту 80. Если этот порт закрыт, перенаправлен нестандартно или ломается на уровне прокси, проверка не завершится. При DNS-01 тоже хватает подводных камней: API-подключение к провайдеру может перестать работать, токен истечет, а запись не обновится вовремя.

Типовые сценарии сбоя

Иногда полезно смотреть на проблему как на набор повторяющихся сценариев. Это быстрее, чем искать абстрактную причину в темноте. Ниже несколько вариантов, которые встречаются особенно часто.

  • cron-задача есть, но не запускается после перезагрузки сервера;
  • certbot обновляет сертификат, но не может перезапустить nginx или Apache;
  • DNS-запись для проверки домена не доходит до нужных серверов;
  • порт 80 закрыт фаерволом или внешним провайдером;
  • на сервере осталось несколько конфигураций одного домена, и используется не та;
  • временной сдвиг или ошибка системных часов мешают корректной проверке.

Если эти пункты прозвучали знакомо, значит, искать нужно не в самом сертификате, а в окружении. Let’s Encrypt в таком случае только фиксирует, что проверка домена не прошла. Системе без разницы, насколько красиво оформлен сайт, если в момент проверки она не видит его так, как ожидает.

Как вернуть сайт в рабочее состояние без лишней суеты

Первый шаг простой: продлить сертификат вручную и убедиться, что веб-сервер подхватил новый файл. После этого уже можно разбираться с автоматикой. Если сразу не восстановить доступ, пользователи продолжат видеть предупреждение, а это лишний риск для трафика и доверия.

Когда сертификат выпущен заново, стоит проверить цепочку полностью: корректный путь к файлам, права на чтение, конфигурацию виртуального хоста и перезагрузку сервера. Иногда после обновления нужно явно выполнить reload, а не просто записать новый файл на диск. Это небольшая деталь, но именно она часто отделяет рабочий сайт от страницы с ошибкой.

Мне доводилось видеть простой случай: сертификат обновился, но в конфигурации nginx был указан старый путь к ключу после переноса проекта. На диске все выглядело чисто, журнал certbot не вызывал подозрений, а браузер упорно показывал просроченный сертификат. На поиск ушло меньше часа, но почти весь этот час был потрачен на проверку того, что уже казалось исправным.

Как сделать так, чтобы история не повторялась

После восстановления работы полезно не закрывать вопрос, а немного укрепить схему. Автообновление должно не просто существовать, а регулярно проверяться. Лучший способ здесь не усложнять, а добавить контрольную привычку: раз в месяц смотреть статус сертификатов, а после изменений на сервере запускать тестовое продление.

Неплохая практика — настроить уведомление о неудачной попытке обновления. Это может быть письмо, системное событие или сообщение в мониторинг. Главное, чтобы сбой не оставался незаметным до последнего дня действия сертификата. Тогда у вас будет запас времени, а не тревожное утро с жалобами от пользователей.

Полезно также вести короткий список того, что стоит проверять после обновления сервера или панели управления. В него обычно входят cron или systemd timer, доступность порта 80, правильный домен в конфигурации и успешный reload веб-сервера. Такой список выглядит скучно только до первого инцидента. Потом он начинает экономить часы.

Когда стоит смотреть глубже, чем в сертификат

Если сертификат выпускается, но сайт все равно показывает ошибку SSL, проблема может быть в балансировщике, CDN или обратном прокси. Внешне кажется, что сервер один, а на деле между пользователем и сайтом стоит еще несколько слоев. Один из них может отдавать старый сертификат, даже если на основном хосте уже лежит новый.

В таких схемах полезно отдельно проверять, где именно завершается TLS-соединение. Иногда сертификат установлен на origin-сервере, а публичный трафик обслуживает другой узел. Тогда обновление на одном сервере не решает ничего, пока не обновлен тот, который реально видит посетитель.

Есть и менее очевидные случаи, связанные с виртуальным хостом и SNI. Если на одном IP живет несколько сайтов, а конфигурация перепутана, браузер может получать чужой сертификат. Внешне это выглядит как просрочка или ошибка SSL, хотя на самом деле сервер просто отдает не тот профиль.

Когда разбор проведен внимательно, картина обычно становится ясной довольно быстро. Сбой в автопродлении почти всегда оставляет след в логах и конфигурации. Главное не ограничиваться поверхностной проверкой и не считать проблему решенной только потому, что сертификат на диске уже новый. Сайт должен отдавать именно его, а не старую копию из кэша, прокси или другого vhost.