sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как обновить и автопродлить SSL-сертификат Let's Encrypt через Certbot

Пошаговая инструкция с командами, настройкой таймеров и разбором частых проблем

09 452 просмотров4 мин
0
Поделиться:TelegramVK

Введение

Сертификаты Let's Encrypt действуют 90 дней. Чтобы не пропустить срок и не получить предупреждение браузера, необходимо настроить автоматическое продление. Certbot — официальный клиент Let's Encrypt — умеет обновлять сертификаты без простоя и вмешательства администратора. В этом руководстве мы разберём, как вручную обновить сертификат, настроить автопродление через systemd-таймер или cron, проверить конфигурацию и устранить типичные ошибки.

Требования

  • Сервер под управлением Linux (Ubuntu 20.04/22.04, Debian 11/12, CentOS 7/8, AlmaLinux и др.).

  • Установленный Certbot. Если нет — установите по официальной инструкции для вашей ОС.

  • Действующий сертификат, полученный через Certbot (например, для Nginx или Apache).

  • Доступ к терминалу с правами sudo.

  • Открытые порты 80 и 443 для прохождения HTTP-01 или TLS-ALPN-01 проверки.

Шаг 1. Проверка текущего статуса сертификатов

Перед обновлением убедитесь, какие сертификаты уже выпущены и когда истекают:

sudo certbot certificates

Команда покажет список сертификатов, домены, дату выпуска и срок действия. Обратите внимание на поле Expiry Date. Если до истечения меньше 30 дней, пора обновлять.

Шаг 2. Ручное обновление сертификата

Certbot обновляет все сертификаты, срок действия которых подходит к концу (обычно менее 30 дней). Для принудительного обновления используйте флаг --force-renewal:

sudo certbot renew --force-renewal

Если нужно обновить только конкретный сертификат, укажите его имя (как в выводе certbot certificates):

sudo certbot renew --cert-name example.com --force-renewal

После обновления перезагрузите веб-сервер, чтобы он подхватил новые файлы:

sudo systemctl reload nginx   # или apache2

Шаг 3. Настройка автоматического продления через systemd-таймер

В большинстве современных дистрибутивов Certbot уже поставляется с systemd-таймером certbot.timer, который запускает certbot renew дважды в день. Проверьте его статус:

systemctl list-timers | grep certbot

Если таймер активен, ничего дополнительно настраивать не нужно. Если нет — включите и запустите:

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

Проверить, что таймер работает, можно так:

systemctl status certbot.timer

Шаг 4. Настройка автопродления через cron (если нет systemd)

Для систем без systemd (например, старые версии CentOS) используйте cron. Откройте редактор crontab для root:

sudo crontab -e

Добавьте строку, которая будет запускать проверку и обновление дважды в день в случайное время (например, в 3:30 и 15:30):

30 3,15 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Флаг --quiet подавляет вывод, кроме ошибок. --post-hook перезагружает Nginx только после успешного обновления.

Шаг 5. Использование хуков для перезагрузки сервисов

Certbot позволяет выполнять команды до или после обновления. Это удобно для перезагрузки веб-сервера или других служб.

  • --pre-hook — выполняется перед попыткой обновления.

  • --post-hook — после успешного обновления.

  • --deploy-hook — только если сертификат был обновлён (в отличие от post-hook, который срабатывает всегда).

Пример с deploy-hook:

sudo certbot renew --deploy-hook "systemctl reload nginx"

Хуки можно прописать в конфигурационных файлах Certbot, чтобы не указывать их каждый раз. Например, в /etc/letsencrypt/renewal/example.com.conf добавьте:

[renewalparams]
renew_hook = systemctl reload nginx

Шаг 6. Проверка автопродления с помощью dry-run

Чтобы убедиться, что автоматическое обновление сработает без ошибок, выполните тестовый запуск:

sudo certbot renew --dry-run

Certbot имитирует процесс обновления, не изменяя реальные файлы. Если тест прошёл успешно, автопродление настроено корректно. При ошибках вы увидите подробное сообщение.

Шаг 7. Настройка уведомлений о сроках

Certbot может отправлять уведомления на email за несколько дней до истечения сертификата. Укажите email при первой регистрации или обновите его командой:

sudo certbot update_account --email your@email.com

Также можно использовать сторонние сервисы мониторинга, например, UptimeRobot или Healthchecks.io, которые проверяют срок действия SSL и шлют алерты.

Шаг 8. Обновление сертификата при использовании плагинов

Если сертификат получен с помощью плагина (например, --nginx или --apache), Certbot сам перезагрузит веб-сервер после обновления. Убедитесь, что в конфигурации renewal не отключён автоматический перезапуск. Проверьте файл /etc/letsencrypt/renewal/example.com.conf:

[renewalparams]
installer = nginx
authenticator = nginx

Если вы используете standalone-режим, убедитесь, что порт 80 свободен на момент проверки.

Шаг 9. Обновление сертификата для нескольких доменов

Certbot обновляет сертификат со всеми доменами, которые были указаны при выпуске. Если нужно добавить новый домен, используйте команду:

sudo certbot certonly --nginx -d example.com -d www.example.com -d new.example.com --expand

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

Шаг 10. Проверка логов и диагностика

Логи Certbot находятся в /var/log/letsencrypt/letsencrypt.log. Просмотрите последние записи:

tail -n 50 /var/log/letsencrypt/letsencrypt.log

Если автопродление не сработало, ищите ошибки в логах. Также проверьте статус таймера:

systemctl status certbot.timer
journalctl -u certbot.service --since "1 hour ago"

Типичные ошибки

1. Сертификат не обновляется из-за закрытого порта 80. Let's Encrypt должен проверить домен через HTTP-01. Убедитесь, что порт 80 открыт и не блокируется фаерволом. 2. Конфликт с веб-сервером в standalone-режиме. Если Certbot запущен в режиме standalone, он занимает порт 80. Остановите Nginx/Apache на время проверки или используйте плагин. 3. Просроченные хуки. Если в --post-hook указана неверная команда, обновление может пройти, но сервер не перезагрузится. Проверяйте синтаксис. 4. Недостаточно прав. Certbot требует root или sudo. Запуск от обычного пользователя приведёт к ошибке доступа к файлам. 5. Лимиты Let's Encrypt. Слишком частые запросы на обновление могут привести к временной блокировке. Используйте --dry-run для тестов.

FAQ

Вопрос: Как часто нужно обновлять сертификат? Ответ: Let's Encrypt выдаёт сертификаты на 90 дней. Certbot автоматически обновляет их за 30 дней до истечения. Рекомендуется проверять статус раз в месяц.

Вопрос: Можно ли обновить сертификат без остановки веб-сервера? Ответ: Да, при использовании плагинов Nginx или Apache Certbot выполняет проверку без остановки. В standalone-режиме потребуется временно освободить порт 80.

Вопрос: Что делать, если автопродление не сработало? Ответ: Проверьте логи, статус таймера, доступность порта 80 и правильность хуков. Запустите certbot renew --dry-run для диагностики.

Вопрос: Как обновить сертификат вручную, если срок уже истёк? Ответ: Выполните sudo certbot renew --force-renewal, затем перезагрузите веб-сервер.

Вопрос: Нужно ли перезагружать сервер после обновления? Ответ: Да, веб-сервер должен перечитать новые файлы сертификата. Используйте systemctl reload nginx или apache2ctl graceful.

Итог

Автоматическое продление сертификатов Let's Encrypt через Certbot — обязательная практика для любого продакшн-сервера. Настройте systemd-таймер или cron, добавьте хуки для перезагрузки веб-сервера, регулярно проверяйте логи и проводите тестовые запуски. Это избавит от внезапного истечения сертификата и обеспечит безопасность соединений.

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

Комментарии

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

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