Как обновить и настроить автопродление SSL-сертификата Certbot: полное руководство
Certbot: ручное обновление, автопродление и решение проблем
Введение
Сертификаты Let's Encrypt выдаются на 90 дней. Если вовремя их не обновлять, сайт начнёт выдавать ошибку безопасности, и посетители увидят предупреждение браузера. Certbot — официальный клиент Let's Encrypt — умеет продлевать сертификаты автоматически, но для этого его нужно правильно настроить. В этом руководстве мы разберём, как обновить сертификат вручную, как настроить автопродление через systemd-таймер или cron, как проверить, что всё работает, и что делать при типичных ошибках.
Требования
Сервер под управлением Linux (Ubuntu, Debian, CentOS и т.п.) с root-доступом или sudo.
Установленный Certbot и плагин для вашего веб-сервера (например,
python3-certbot-nginxилиpython3-certbot-apache).Настроенный веб-сервер (Nginx или Apache), который обслуживает домен.
Домен, указывающий на IP вашего сервера.
Открытые порты 80 и 443 для прохождения проверки ACME.
Шаг 1. Проверка текущего статуса сертификатов
Прежде чем что-то менять, посмотрите, какие сертификаты уже есть и когда истекают:
sudo certbot certificatesВы увидите список доменов, даты выдачи и истечения, а также пути к файлам. Обратите внимание на поле Expiry Date — если до окончания меньше 30 дней, пора продлевать.
Шаг 2. Ручное обновление сертификата
Самый простой способ — выполнить команду:
sudo certbot renewCertbot проверит все сертификаты и обновит только те, которые истекают в ближайшие 30 дней. Если нужно обновить принудительно, даже если срок ещё не подошёл, используйте флаг --force-renewal:
sudo certbot renew --force-renewalОднако не злоупотребляйте принудительным обновлением: Let's Encrypt имеет лимиты на количество выдач (5 дубликатов в неделю).
Шаг 3. Тестовый прогон (dry-run)
Перед настройкой автоматики полезно проверить, что продление вообще возможно, без реального запроса нового сертификата:
sudo certbot renew --dry-runCertbot выполнит все шаги, кроме финальной выдачи, и покажет, есть ли ошибки. Если dry-run прошёл успешно, можно переходить к автоматизации.
Шаг 4. Автопродление через systemd-таймер
В большинстве современных дистрибутивов Certbot при установке из пакета уже создаёт systemd-таймер. Проверьте его наличие:
systemctl list-timers | grep certbotЕсли таймер есть, убедитесь, что он активен:
sudo systemctl enable --now certbot.timerПроверить статус можно командой:
systemctl status certbot.timerПо умолчанию таймер запускает certbot renew дважды в день со случайной задержкой. Этого достаточно для своевременного продления.
Шаг 5. Автопродление через cron (если нет systemd)
На старых системах или в контейнерах systemd может отсутствовать. Тогда используйте cron. Откройте редактор crontab для root:
sudo crontab -eДобавьте строку, которая будет запускать проверку дважды в день (например, в 00:00 и 12:00):
0 0,12 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Здесь --quiet отключает лишний вывод, а --post-hook перезагружает Nginx после успешного обновления, чтобы он подхватил новый сертификат. Если у вас Apache, замените команду на systemctl reload apache2.
Шаг 6. Настройка хуков для перезагрузки веб-сервера
Certbot после обновления не перезагружает веб-сервер автоматически. Чтобы изменения вступили в силу, нужно перезапустить или перезагрузить Nginx/Apache. Это делается через хуки:
--pre-hook— выполняется перед попыткой обновления.--post-hook— выполняется после успешного обновления.--deploy-hook— выполняется только при фактическом обновлении сертификата (в отличие от post-hook, который срабатывает всегда).
Пример для Nginx:
sudo certbot renew --deploy-hook "systemctl reload nginx"Эти хуки можно прописать в конфигурации Certbot, чтобы не указывать каждый раз. Создайте файл /etc/letsencrypt/cli.ini и добавьте:
deploy-hook = systemctl reload nginxШаг 7. Проверка работы автопродления
Чтобы убедиться, что таймер или cron настроены верно, можно запустить симуляцию:
sudo certbot renew --dry-runЕсли ошибок нет, автоматика сработает в нужный момент. Также полезно проверить логи Certbot:
sudo journalctl -u certbot.timerили для cron:
grep certbot /var/log/syslogШаг 8. Обновление сертификата для конкретного домена
Если нужно обновить только один сертификат, укажите его имя (оно отображается в certbot certificates):
sudo certbot renew --cert-name example.comЭто удобно, когда на сервере несколько сайтов и вы хотите проверить один из них.
Шаг 9. Расширение сертификата новыми доменами
Иногда требуется добавить поддомен к существующему сертификату. Это делается командой certbot certonly с указанием всех доменов:
sudo certbot certonly --nginx -d example.com -d www.example.com -d new.example.comCertbot создаст новый сертификат, включающий все перечисленные домены. Не забудьте, что при этом старый сертификат будет заменён.
Шаг 10. Решение проблемы с проверкой домена
Если certbot renew падает с ошибкой проверки (например, Timeout during connect), проверьте:
1. Домен действительно указывает на IP сервера (команда dig +short example.com). 2. Порты 80 и 443 открыты в фаерволе. 3. Веб-сервер запущен и отвечает на запросы. 4. Нет редиректа с HTTP на HTTPS, который мешает проверке (для плагина nginx Certbot сам обрабатывает это, но для standalone может потребоваться временно отключить редирект).
Шаг 11. Обновление при использовании CDN или прокси
Если сайт работает через Cloudflare или другой прокси, автоматическая проверка HTTP-01 может не пройти. В таком случае используйте DNS-01 challenge с плагином для вашего DNS-провайдера. Например, для Cloudflare:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /path/to/credentials.ini -d example.comНе забудьте установить соответствующий плагин (python3-certbot-dns-cloudflare).
Шаг 12. Настройка уведомлений об истечении
Certbot может отправлять письма на указанный email при приближении срока истечения. Убедитесь, что email указан при регистрации:
sudo certbot update_account --email your@email.comТакже можно использовать сторонние сервисы мониторинга, например, Let's Encrypt Expiry Bot.
Типичные ошибки
Забыли перезагрузить веб-сервер после обновления — сертификат обновился, но сайт продолжает отдавать старый. Решение: используйте
--deploy-hook.Неправильные права доступа к файлам сертификатов. Certbot хранит их в
/etc/letsencrypt/live/, и веб-сервер должен иметь доступ на чтение.Конфликт с другими службами, занимающими порт 80. Например, если у вас запущен другой веб-сервер, проверка не пройдёт.
Использование `--force-renewal` слишком часто — приводит к превышению лимитов Let's Encrypt.
Отсутствие автоматизации — ручное обновление рано или поздно забывается.
FAQ
Вопрос: Как часто нужно обновлять сертификаты Let's Encrypt? Ответ: Сертификаты действуют 90 дней. Рекомендуется настроить автоматическое обновление за 30 дней до истечения.
Вопрос: Можно ли обновить сертификат, не останавливая веб-сервер? Ответ: Да, при использовании плагинов nginx или apache Certbot не требует остановки. Для standalone-режима может потребоваться временная остановка.
Вопрос: Что делать, если автопродление не сработало? Ответ: Проверьте логи (/var/log/letsencrypt/letsencrypt.log), запустите certbot renew --dry-run для диагностики.
Вопрос: Как перенести сертификаты на другой сервер? Ответ: Скопируйте каталоги /etc/letsencrypt и /var/lib/letsencrypt, затем на новом сервере выполните certbot renew --dry-run для проверки.
Вопрос: Будет ли Certbot автоматически продлевать сертификат, если я установил его вручную? Ответ: Да, если вы настроили таймер или cron. При установке из пакета таймер обычно создаётся автоматически.
Итог
Обновление и автопродление сертификатов Certbot — критически важная задача для поддержания безопасности сайта. Настройте автоматическое продление через systemd-таймер или cron, добавьте хуки для перезагрузки веб-сервера и регулярно проверяйте статус с помощью certbot certificates и --dry-run. Следуя этому руководству, вы избежите внезапного истечения сертификата и обеспечите бесперебойную работу вашего сайта.
Читайте также
DeepSeek и Moonshot приписывают обучение новых моделей на ответах GPT-6 Astra
Honor представила смартфон X9e s с батареей 8560 мА·ч — в СНГ у него есть близнец Turbo 5G
Anthropic предупредила инвесторов об экзистенциальных рисках своего ИИ в документах к IPO
Google запустила браузерную игру Odd One Out: нужно найти ИИ-картинку среди фрагментов реальных картин
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.
