sadrix logoSadriX
Гайды

Как обновить и настроить автопродление SSL-сертификата Certbot: полное руководство

Certbot: ручное обновление, автопродление и решение проблем

010 332 просмотров5 мин
0
Поделиться:TelegramVK

Введение

Сертификаты 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 renew

Certbot проверит все сертификаты и обновит только те, которые истекают в ближайшие 30 дней. Если нужно обновить принудительно, даже если срок ещё не подошёл, используйте флаг --force-renewal:

sudo certbot renew --force-renewal

Однако не злоупотребляйте принудительным обновлением: Let's Encrypt имеет лимиты на количество выдач (5 дубликатов в неделю).

Шаг 3. Тестовый прогон (dry-run)

Перед настройкой автоматики полезно проверить, что продление вообще возможно, без реального запроса нового сертификата:

sudo certbot renew --dry-run

Certbot выполнит все шаги, кроме финальной выдачи, и покажет, есть ли ошибки. Если 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.com

Certbot создаст новый сертификат, включающий все перечисленные домены. Не забудьте, что при этом старый сертификат будет заменён.

Шаг 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. Следуя этому руководству, вы избежите внезапного истечения сертификата и обеспечите бесперебойную работу вашего сайта.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.