#Что происходит и когда применима инструкция
Сертификат Let’s Encrypt успешно устанавливался вручную, но не продлевается автоматически: сервис cron/systemd не выполняет задачу, проверка ACME меняется после миграции или обновлённые файлы не подхватывает веб-сервер.
#Основные причины и их признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Планировщик не запускает клиентsystemd timer, cron или панель хостинга не активны либо конфликтуют. | В журнале нет попыток продления около срока | Проверьте реальный механизм планирования. |
| Не работает прежний метод проверкиИзменился webroot, DNS, ключ API или сетевой маршрут. | Запуск есть, но ACME возвращает 403, 404 или DNS-ошибку | Испытайте renewal с действующим типом вызова. |
| Сертификат продлён, но не установленСервер не перечитал конфигурацию или CDN хранит отдельный сертификат. | В файле новый срок, а снаружи старый | Проверьте deploy-hook и внешнюю точку TLS. |
#Пошаговая диагностика и устранение
- Определите управляющий инструментПосмотрите, кем был выпущен сертификат: Certbot, acme.sh, встроенным интерфейсом панели или менеджером CDN. Инструкция для
certbot renewприменима только к сертификатам, которыми управляет Certbot; не запускайте несколько независимых клиентов для одного домена без понимания последствий.
- Посмотрите перечень сертификатов CertbotЕсли установлен Certbot, на Linux с правами администратора выведите информацию о сертификатах и сроке действия, запишите имена и пути. Не публикуйте личный ключ или закрытое содержимое
/etc/letsencrypt.Linux · Терминал (Bash)КомандаНужен sudoLinux с Certbot. Команда только читает информацию; при отсутствии Certbot используйте штатную панель выпуска.sudo certbot certificates
- Проверьте автоматический запускНа системе с systemd посмотрите таймеры, включая неактивные; имя может быть
certbot.timerлибоsnap.certbot.renew.timer. Если таймера нет, выясните, не настроен ли cron, задача панели или контейнер. - Linux c systemd; чтениеLinux · Терминал (Bash)КомандаLinux c systemd; чтение. Пустой результат не доказывает отсутствие другого расписания.
systemctl list-timers --all | grep -i certbot
- Проверьте журнал последней попыткиПросмотрите журнал
journalctlдля фактического unit и отдельные логи Certbot в закрытом каталоге. Сопоставьте дату, домен, используемый метод и код ошибки. Не изменяйте расписание, пока неизвестно, выполнялся ли клиент вообще.
- Запустите безопасную пробу продленияНа сервере с действующей настройкой Certbot выполните
renew --dry-run, заранее изучив настроенные хуки. Проба может обращаться к сети и запускать хуки; она не устанавливает тестовый сертификат вместо рабочего. Зафиксируйте конкретную ошибку HTTP-01/DNS-01.Linux · Терминал (Bash)КомандаНужен sudoLinux, Certbot, доступ ACME;sudoтребует администратора. Если certificate is not due, dry-run всё равно проверяет сценарий продления.sudo certbot renew --dry-run
- Исправьте причину отказа ACMEПри HTTP-01 проверьте доступность порта 80, DNS и путь
.well-known/acme-challenge; при DNS-01 — действительность API-ключа, имя TXT, публикацию и задержку. Не открывайте публичный доступ к закрытым каталогам и не отключайте проверку сертификата.
- Проверьте установку и обновление веб-сервераЕсли продление проходит, выясните, куда клиент сохраняет файлы, и как рабочий сервер их читает. Для Nginx обычно нужен управляемый
fullchain.pemи ключ. Настройте согласованный deploy-hook только после проверки синтаксиса и возможности безопасной перезагрузки.
- Установите контроль на будущееПроверьте сертификат через внешнее TLS-подключение, включите уведомление об истечении срока и наблюдение за результатами задачи планировщика. Сохраните единый метод выпуска: лишние cron-задачи и одновременные продления могут упереться в ограничения удостоверяющего центра.
#Проверка результата
Пробное продление проходит, планировщик выполняет единственную понятную задачу, обновлённый сертификат попадает на внешнюю точку TLS; установлено уведомление о приближении срока окончания.
#Если решить проблему не удалось
Если сухая проверка успешна, но в журнале нет регулярных запусков, чините таймер/cron, а не DNS. Если запуски есть, но наружный сертификат старый, исследуйте deploy-hook, CDN и конфигурацию виртуального узла.