Настроите бесплатные TLS-сертификаты Let's Encrypt через certbot и nginx, включая автообновление и типичные ошибки. Примерное время выполнения: 20–45 минут при наличии домена и сервера.
0
Статья была полезной?
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…
К концу гайда у вас будут рабочие сертификаты Let's Encrypt на nginx 1.26 и настроенный механизм автопродления; все команды сопровождаются ожидаемым выводом и способами исправления ошибок. Время выполнения — от 20 до 45 минут при готовом DNS и минимальной конфигурации сервера.
Что вы изучите
Установка nginx 1.26 (релиз 2025) и проверка конфигурации.
Установка certbot 2.6 (релиз 2025) рекомендованным способом через snap.
Получение сертификата через плагин nginx и проверка цепочки.
Настройка автопродления через systemd-timer и тестирование dry-run.
Диагностика типичных ошибок: порт 80, DNS, permissions, rate limits.
Reading package lists... Done
Building dependency tree...
The following NEW packages will be installed:
nginx
0 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
Setting up nginx (1.26.1-1~ubuntu24.04) ...
Типичная ошибка: "Package 'nginx' has no installation candidate".
Err:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 nginx ...
404 Not Found [IP: ...]
E: Package 'nginx' has no installation candidate
Как исправить: добавьте официальный репозиторий nginx и обновите индексы.
Snap-пакет certbot поддерживается Electronic Frontier Foundation и гарантирует актуальную версию 2.6.* (2025). Snap работает быстрее по обновлениям и включает systemd-timer.
2025-03-01T12:00:00Z core 16-... installed
certbot 2.6.0 from EFF installed
Типичная ошибка: snap не найден или старая версия apt.
apt: command not found
snap: command not found
Фикс: убедитесь, что вы на Ubuntu/Debian; для минимальных образов установите пакеты systemd/snapd и перезагрузите демон systemd, затем повторите установку.
Шаг 3: сконфигурировать server block nginx для домена
Создайте простой server block для example.com, чтобы certbot мог выполнить HTTP-01 challenge на порту 80.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Obtaining a new certificate
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com
Ошибка: "Failed authorization procedure" или "Connection refused".
Перед автоматизацией всегда выполняйте тестовое продление, чтобы certbot подтвердил доступ к ACME серверам Let's Encrypt.
sudo certbot renew --dry-run
Ожидаемый вывод:
Processing /etc/letsencrypt/renewal/example.com.conf
Cert not due for renewal, but simulating renewal for dry run
** DRY RUN: simulating 'certbot renew' close to cert expiry
** All renewals succeeded. **
Ошибка: "The following certs could not be renewed" или timeout при обращении к challenge URL.
TimeoutError: http-01 challenge for 'example.com' timed out
Фикс: проверьте снова nginx конфигурацию, проброс портов и наличие правил WAF/CDN (Cloudflare в режиме "orange cloud" блокирует HTTP-01). В случае CDN используйте DNS-01 challenge или временно отключите проксирование.
Как установить certbot?
Поддерживаемые варианты установки: snap (рекомендуется), apt (distribution package) и pip (не рекомендуется для production). Snap гарантирует certbot 2.6.* в 2025–2026 годах.
Snap (Ubuntu/Debian): команды из Шага 2. Snap автоматически создает systemd unit для автопродления.
Но пакеты могут быть старее и не включать последние фиксы.
Pip: используйте только в изолированных окружениях; не рекомендуется для system-wide установки.
Типичная ошибка при apt: "python3-certbot-nginx not found" — исправляется добавлением backports или использованием snap.
Как настроить автообновление?
Есть два основных способа: полагаться на встроенный systemd-timer от snap-certbot или настроить собственный systemd unit + timer. Snap обычно уже включает таймер; проверьте его наличие:
systemctl list-timers | grep certbot
# или
sudo systemctl status snap.certbot.renew.service
Ожидаемый вывод (snap-managed):
NEXT LEFT LAST PASSED
Mon 2026-01-12 08:15:00 UTC 4 days left Mon 2026-01-05 08:15:02 UTC 3 days ago
Created symlink /etc/systemd/system/timers.target.wants/certbot-renew.timer → /etc/systemd/system/certbot-renew.timer.
Типичная ошибка: "Failed to start certbot-renew.timer: Unit certbot-renew.timer not found." Фикс — выполнить sudo systemctl daemon-reload, проверить пути и права файлов.
Частые ошибки
Список наиболее встречающихся ситуаций с конкретными решениями.
Ошибка 1: Rate limit от Let's Encrypt — слишком много запросов за короткий период. Решение: дождитесь сброса лимита (обычно час/день) и используйте staging endpoint для тестов:
sudo certbot --nginx --staging -d example.com
Ошибка 2: DNS не указывает на сервер — ACME сервер не видит ваш IP. Решение: проверьте A/AAAA через
dig +short example.com
и исправьте записи у регистратора.
Ошибка 3: CDN/Proxy мешает HTTP-01 — Cloudflare в проксирующем режиме блокирует challenge. Решение: временно отключите проксирование (серое облако) или используйте DNS-01 challenge.
Ошибка 4: Недостаточно прав для записи в /etc/letsencrypt — запуск certbot не от root. Решение: всегда запускать certbot с sudo либо использовать системный сервис для автоматизации.
Вывод команды certbot --nginx после успешного получения сертификата
Внутренние ссылки для дальнейшего чтения: DevOps и Безопасность. Также полезно прочитать руководство по Docker для размещения приложений за nginx.
Пример nginx server block для example.com, порт 80 и root каталог
Используйте staging-сервер Let's Encrypt для тестирования и не превышайте лимиты при автоматизации.
Частые вопросы
Как проверить, установлен ли certbot и его версия?
Проверьте версию командой certbot --version. Ожидаемый вывод для snap-установки: "certbot 2.6.0" (2025). Если команда не найдена, проверьте, что путь /snap/bin в $PATH или создайте символьную ссылку sudo ln -s /snap/bin/certbot /usr/bin/certbot. Для apt-версии вывод может отличаться: "certbot 1.22" — в таком случае рекомендуется перейти на snap для актуальных фиксов.
Что делать, если certbot не может получить доступ к порту 80?
Проверьте локальные прослушиваемые сокеты: sudo ss -ltnp | grep ':80'. Если порт занят, остановите соответствующую службу (например, apache2) или измените её конфигурацию. Проверьте брандмауэр: sudo ufw status, при необходимости откройте порты: sudo ufw allow 80/tcp && sudo ufw allow 443/tcp. На облачных платформах также проверьте правила security group/ACL.
Почему сертификат не обновляется автоматически?
Причины: отсутствует systemd-timer, таймер отключён, certbot установлен не через snap и cron не настроен либо деплой-хук вызывает ошибку при перезагрузке nginx. Проверьте timers: systemctl list-timers | grep certbot. Если таймер отсутствует, создайте unit+timer из примера и убедитесь, что служба перезагрузки nginx работает и пользователь имеет права на перезагрузку.
Когда использовать DNS-01 вместо HTTP-01?
DNS-01 используется, если домен проксируется CDN (Cloudflare, Sucuri) или если вы не можете открыть порт 80 (например, хостинг ограничивает доступ). DNS-01 требует управления DNS API (Cloudflare, Route53 и т.д.) — certbot поддерживает плагины для популярных провайдеров, но их необходимо установить и настроить API-ключ в конфигурации.
Сколько времени занимает получение сертификата?
Типичный сценарий: подготовка nginx и получение сертификата — 1–5 минут при корректных DNS и открытых портах. Полная процедура с установкой snap, настройкой сервисов и тестовым продлением занимает 20–45 минут. Тестирование и устранение ошибок могут добавить ещё 15–60 минут в сложных сценариях.
Let's Encrypt + certbot + nginx: полный гайд | KtoHto
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…