- Как настроить автоматическое обновление сертификатов Let’s Encrypt, чтобы не потерять HTTPS
- Как это работает: три ключевых элемента
- Шаг за шагом: как настроить автоматическое обновление
- Что делать, если у тебя не nginx или не Ubuntu?
- Частые ошибки — и как их избежать
- Когда что выбирать
- Как лучше сделать: проверка и мониторинг
- Что делать, если всё сломалось
- Рекомендации: как не попасть в ловушку
- Итог: что делать прямо сейчас
Как настроить автоматическое обновление сертификатов Let’s Encrypt, чтобы не потерять HTTPS
Представь: ты настроил HTTPS на своём сайте, всё работает, браузер показывает зелёный замочек. Через три месяца — внезапно сайт перестал открываться. Пользователи видят предупреждение «Сертификат недействителен». Ты лезешь в панель — оказалось, Let’s Encrypt автоматически истёк, а ты забыл про него. Это не редкость. И это легко предотвратить.
Let’s Encrypt выдаёт сертификаты на 90 дней. Это не ошибка — так задумано: короткий срок повышает безопасность, но требует автоматизации. Если ты не настроил обновление — ты рискуешь. Не потому что «надо», а потому что HTTPS — это не опция, а базовая инфраструктура. Как ток в розетке: не замечаешь, пока не пропал.
В этой статье — только то, что нужно сделать, чтобы сертификаты обновлялись сами. Без воды, без теории про PKI и цепочки доверия. Только шаги, которые работают на реальных серверах.
Как это работает: три ключевых элемента
Автоматическое обновление — не волшебство. Это три простых части:
- Клиент — программа, которая запрашивает новый сертификат. Чаще всего это
certbot. - Планировщик — система, которая запускает клиента в нужный момент. Обычно это
cronилиsystemd timer. - Перезагрузка веб-сервера — после обновления сертификата нужно перезагрузить nginx или Apache, чтобы он начал использовать новый файл.
Если хотя бы один из этих элементов сломан — сертификат не обновится. И сайт упадёт.
Шаг за шагом: как настроить автоматическое обновление
Допустим, у тебя Ubuntu 22.04, nginx и сайт доступен по домену example.com. Ты уже получил сертификат через certbot — это значит, что он установлен и работает. Теперь настраиваем автоматику.
- Проверь, установлен ли certbot
В терминале введи:certbot --version
Если видишь что-то вроде
certbot 2.7.0— всё ок. Если нет — установи:sudo apt update && sudo apt install certbot python3-certbot-nginx
- Проверь, есть ли у тебя активный сертификат
Введи:sudo certbot certificates
Убедись, что в списке есть твой домен и статус —
VALID. Если сертификат не найден — сначала его нужно получить, а потом возвращайся сюда. - Протестируй обновление вручную
Это критично. Запусти:sudo certbot renew --dry-run
Если видишь
Congratulations, all simulated renewals succeeded— отлично. Если есть ошибки — разбирай их сейчас, а не через 80 дней. Частая причина: nginx не запущен, порт 80/443 занят, DNS не прописан. - Настрой автоматический запуск
Certbot автоматически создаёт задачу для cron. Проверь её:sudo cat /etc/cron.d/certbot
Там должна быть строка вроде:
0 12 * * * root test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot -q renew
Это значит: каждый день в 12:00 проверяется, нужно ли обновить сертификаты. Если да — обновляет. Плюс случайная задержка до часа, чтобы не перегружать серверы Let’s Encrypt.
- Убедись, что веб-сервер перезагружается после обновления
Certbot умеет автоматически перезагружать nginx или Apache, но только если ты указал это при первом получении сертификата. Проверь:sudo nano /etc/letsencrypt/renewal/example.com.conf
В файле должен быть блок:
[renewalparams] authenticator = nginx installer = nginx
Если вместо
installer = nginxстоитinstaller = none— это плохо. Сертификат обновится, но nginx не перезагрузится, и HTTPS сломается. Исправь:sudo certbot --nginx --cert-name example.com
И выбери опцию «перезагрузить nginx» при перенастройке.
- Проверь, что всё работает
Запусти обновление вручную:sudo certbot renew
Если не было ошибок — сертификаты обновились. Проверь даты:
sudo certbot certificates
Даты окончания должны сдвинуться на +90 дней.
Что делать, если у тебя не nginx или не Ubuntu?
Система может быть любой: CentOS, Debian, FreeBSD, Docker — но принцип один. Разница только в деталях.
| Среда | Клиент | Как проверить задачу | Как перезагрузить сервер |
|---|---|---|---|
| Ubuntu / Debian (nginx) | certbot | cat /etc/cron.d/certbot | sudo systemctl reload nginx |
| CentOS / RHEL (nginx) | certbot | systemctl list-timers | grep certbot | sudo systemctl reload nginx |
| Docker (nginx) | certbot (в отдельном контейнере) | docker exec certbot-container crontab -l | Перезагрузи контейнер nginx: docker-compose restart nginx |
| Apache на Ubuntu | certbot | cat /etc/cron.d/certbot | sudo systemctl reload apache2 |
| Cloudflare (DNS-валидация) | certbot + плагин | certbot certificates | Перезагружай веб-сервер вручную или через скрипт |
Если ты используешь Cloudflare, AWS Route53 или другой DNS-провайдер — тебе нужен плагин для DNS-валидации. Например:
python3-certbot-dns-cloudflare. Установи его, добавь API-ключ в файл /etc/letsencrypt/cloudflare.ini, и в команде получения сертификата укажи:
certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d example.com
После этого автоматическое обновление будет работать так же — через cron и перезагрузку сервера.
Частые ошибки — и как их избежать
- Ошибка: «No such file or directory» при обновлении
Причина: ты удалил файлы сертификатов вручную, или изменил путь к ним. Решение: не трогай папки/etc/letsencryptбез понимания, что делаешь. Это системные файлы — не «мусор». - Ошибка: «Port 80 is already in use»
Причина: certbot пытается проверить домен через HTTP-челлендж, но порт занят другим процессом (например, другим nginx или прокси). Решение: останови лишние сервисы перед обновлением, или используй DNS-валидацию. - Ошибка: «The client lacks sufficient authorization»
Причина: DNS-записи не прописаны, или не обновились. Проверь черезdig example.com— если IP не совпадает с твоим сервером — жди 5–10 минут или пропиши вручную. - Ошибка: сертификат обновился, но сайт всё ещё показывает старый
Причина: nginx не перезагрузился. Проверь:sudo systemctl status nginx— если статус «active», но сертификат не обновился, значит,installer = noneв конфиге. Исправь, как описано выше. - Ошибка: certbot не запускается по расписанию
Причина: cron не работает. Проверь:sudo systemctl status cron. Если «inactive» — включи:sudo systemctl enable --now cron.
Когда что выбирать
Ты не один. И твоя ситуация может отличаться. Вот как действовать в разных случаях:
- Если ты один человек, управляешь одним сайтом на VPS
— Используй certbot + nginx. Установи через пакетный менеджер. Не трогай настройки. Пусть всё делает автоматически. Проверяй раз в месяц:sudo certbot certificates. - Если у тебя несколько сайтов, разные домены
— Добавляй все домены в один сертификат через-d site1.com -d site2.com. Так ты получаешь один сертификат на несколько доменов — и обновляешь его раз в 90 дней, а не по три раза. - Если сайт в Docker, а certbot — на хосте
— Не запускай certbot внутри контейнера. Лучше: запускай его на хосте, а сертификаты монтируй в контейнер nginx как volume. Пример:-v /etc/letsencrypt:/etc/letsencrypt
Тогда nginx внутри контейнера будет видеть обновлённые файлы без пересборки.
- Если ты используешь CDN (Cloudflare, CloudFront)
— Не используй HTTP-валидацию. Она не сработает, потому что трафик идёт через CDN. Используй DNS-валидацию. Установи плагин, пропиши ключ API — и всё будет работать. - Если ты не уверен, что у тебя всё настроено
— Запустиsudo certbot renew --dry-runпрямо сейчас. Если ошибка — не жди 80 дней. Исправляй сейчас. Это занимает 10 минут. А если не исправишь — сайт упадёт без предупреждения.
Как лучше сделать: проверка и мониторинг
Автоматизация — это хорошо. Но даже автоматизация может сломаться. Поэтому:
- Проверяй сертификаты раз в месяц:
sudo certbot certificates. Смотри на даты окончания. Если они меньше 30 дней — значит, обновление не сработало. - Настрой уведомление. Например, добавь в cron задачу, которая раз в неделю проверяет дату окончания и шлёт email, если осталось меньше 15 дней:
0 8 * * 1 [ (openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -enddate | cut -d= -f2) -lt(date -d "15 days" +%Y%m%d) ] && echo "Сертификат example.com истекает через 15 дней" | mail -s "Срочно: сертификат" admin@example.com
- Используй внешний мониторинг: например, UptimeRobot или Healthchecks.io. Настрой проверку HTTPS-статуса. Если сайт перестанет открываться — ты получишь уведомление, даже если не сидишь в терминале.
Что делать, если всё сломалось
Сертификат истёк. Сайт не открывается. Что делать?
- Проверь, есть ли доступ к серверу через SSH.
- Запусти:
sudo certbot renew --force-renewal - Если выдаёт ошибку — смотри, в чём она. Чаще всего: nginx не запущен → запусти:
sudo systemctl start nginx. - Если DNS не прописан — исправь его в панели хостинга.
- После успешного обновления:
sudo systemctl reload nginx. - Проверь сайт в браузере — замочек должен появиться.
После этого — вернись к настройке автоматического обновления. Не просто «сделал и забыл» — проверь, что cron работает, что installer = nginx, что порт 80 свободен.
Рекомендации: как не попасть в ловушку
- Никогда не удаляй папку
/etc/letsencrypt. Это не кэш — это твои ключи и сертификаты. - Не используй ручное обновление через
certbot certonlyбез--dry-run. Ты можешь получить лимит на запросы — и не сможешь получить новый сертификат 7 дней. - Не отключай cron. Даже если «всё работает». Сертификаты — не то, что можно игнорировать.
- Не используй самоподписанные сертификаты для продакшена. Они не работают в браузерах. Let’s Encrypt — бесплатный, автоматический, доверенный.
- Если ты используешь облачный хостинг (например, AWS, Hetzner, DigitalOcean) — проверь, не блокирует ли он порт 80 по умолчанию. Иногда брандмауэр мешает проверке.
Самый важный совет: тестировать обновление — не раз в три месяца, а сразу после настройки. Если ты не проверил certbot renew --dry-run — ты не настроил автоматику. Ты просто надеешься.
Итог: что делать прямо сейчас
Ты не должен знать, как работает TLS. Ты должен знать, что HTTPS работает. Вот твой чек-лист на сегодня:
- Зайди на сервер через SSH.
- Введи:
sudo certbot certificates— убедись, что сертификаты есть и валидны. - Введи:
sudo certbot renew --dry-run— если есть ошибки — исправь их сейчас. - Открой:
sudo nano /etc/letsencrypt/renewal/твой_домен.conf— убедись, что есть строкаinstaller = nginx(или apache). - Проверь:
sudo systemctl status cron— если не active, включи:sudo systemctl enable --now cron. - Запусти:
sudo certbot renew— если всё прошло без ошибок — ты в безопасности.
После этого — забудь про сертификаты. Они будут обновляться сами. Ты не должен вспоминать о них до тех пор, пока не увидишь уведомление: «Сертификат истекает через 15 дней». И даже тогда — это просто напоминание. Ты уже сделал всё правильно.
Информация в этой статье носит ознакомительный характер. Настройка веб-сервера и сертификатов требует понимания инфраструктуры. Если ты не уверен — обратись к системному администратору или специалисту по безопасности.
