Как обновить и автопродлить SSL-сертификат Let's Encrypt через Certbot
Пошаговая инструкция с командами, настройкой таймеров и разбором частых проблем
Введение
Сертификаты 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-runCertbot имитирует процесс обновления, не изменяя реальные файлы. Если тест прошёл успешно, автопродление настроено корректно. При ошибках вы увидите подробное сообщение.
Шаг 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, добавьте хуки для перезагрузки веб-сервера, регулярно проверяйте логи и проводите тестовые запуски. Это избавит от внезапного истечения сертификата и обеспечит безопасность соединений.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



