sadrix logoSadriX
Гайды

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

Пошаговая инструкция по продлению сертификатов Let's Encrypt с помощью Certbot и настройке автоматизации

07 350 просмотров3 мин
0
Поделиться:TelegramVK

Введение

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

Требования

  • Установленный Certbot (версия 1.0 и выше).

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

  • Настроенный веб-сервер (Nginx или Apache) с работающим сайтом.

  • Открытые порты 80 и 443.

  • Действующий сертификат, полученный через Certbot.

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

Перед обновлением убедитесь, что сертификат существует и скоро истекает. Выполните:

sudo certbot certificates

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

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

Для ручного продления всех сертификатов используйте:

sudo certbot renew

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

sudo certbot renew --cert-name example.com

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

sudo systemctl reload nginx

Шаг 3: Тестовый запуск (dry-run)

Перед настройкой автоматизации проверьте, что обновление пройдёт без ошибок:

sudo certbot renew --dry-run

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

Шаг 4: Автоматическое продление через systemd таймер

Современные версии Certbot устанавливают systemd таймер certbot.timer, который запускает проверку дважды в день. Проверьте его статус:

sudo systemctl status certbot.timer

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

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

Убедитесь, что таймер работает:

sudo systemctl list-timers | grep certbot

Шаг 5: Настройка автоматического перезапуска веб-сервера

После обновления сертификата веб-сервер должен перезагрузиться. Certbot поддерживает хуки — скрипты, выполняемые до или после обновления. Создайте файл /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh:

sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy
sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Добавьте:

#!/bin/bash
systemctl reload nginx

Сделайте файл исполняемым:

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Теперь после каждого успешного обновления Nginx будет перезагружен.

Шаг 6: Альтернатива — cron

Если systemd таймер недоступен, используйте cron. Откройте crontab для root:

sudo crontab -e

Добавьте строку:

0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Это запускает проверку ежедневно в 3:00 и перезагружает Nginx после обновления.

Шаг 7: Проверка логов

Certbot ведёт логи в /var/log/letsencrypt/letsencrypt.log. Проверьте последние записи:

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

Ищите сообщения об успешном обновлении или ошибки.

Шаг 8: Обновление сертификата вручную с указанием домена

Если нужно обновить только один домен, используйте:

sudo certbot certonly --force-renewal -d example.com -d www.example.com

Флаг --force-renewal заставляет Certbot обновить сертификат, даже если срок ещё не подошёл. Будьте осторожны: Let's Encrypt имеет лимиты на количество запросов.

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

  • Ошибка проверки домена: убедитесь, что DNS-записи указывают на ваш сервер и порт 80 доступен извне.

  • Конфликт с веб-сервером: если Nginx/Apache занимает порт 80, используйте плагин --webroot или остановите сервер на время обновления.

  • Просроченный сертификат: если сертификат уже истёк, сначала обновите его вручную, затем настройте автоматизацию.

  • Не работает таймер: проверьте, что systemd активен и таймер включён.

  • Лимиты Let's Encrypt: не запускайте --force-renewal слишком часто.

FAQ

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

Можно ли обновить сертификат без простоя сайта? Да, при использовании плагина --webroot или --nginx обновление происходит без остановки сервера.

Что делать, если автопродление не сработало? Проверьте логи, запустите certbot renew --dry-run для диагностики, убедитесь, что таймер или cron работают.

Как проверить, что сертификат обновился? Используйте certbot certificates или откройте сайт в браузере и посмотрите срок действия сертификата.

Итог

Certbot значительно упрощает управление SSL-сертификатами. Регулярно проверяйте срок действия, настройте автоматическое продление через systemd таймер или cron, и ваш сайт всегда будет защищён. Не забывайте про тестовый запуск и мониторинг логов, чтобы избежать неожиданных проблем.

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

Комментарии

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

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