Let's Encrypt — это центр сертификации (CA), который выдаёт бесплатные TLS/SSL-сертификаты и тем самым открывает возможность подключить HTTPS на любом веб-сервере. Весь процесс автоматизирован с помощью клиента Certbot: он сам получает сертификат, прописывает нужные директивы в конфигурацию Nginx и берёт на себя плановые обновления.
В этом руководстве мы разберём полный цикл: установку Certbot, получение сертификата для домена на Ubuntu, настройку автоматического продления и усиление конфигурации HTTPS согласно современным стандартам безопасности.
Что нужно подготовить заранее
Перед началом убедитесь, что у вас есть:
- Сервер Ubuntu 22.04, 24.04 или 25.04 с пользователем, имеющим права
sudo, и настроенным файрволом - Зарегистрированное доменное имя (в примерах используется
example.com) - DNS-запись типа A для
example.com, указывающая на публичный IP-адрес сервера - DNS-запись типа A для
www.example.com, также указывающая на этот IP - Установленный и настроенный Nginx с серверным блоком для вашего домена
Шаг 1. Установка Certbot
Разработчики Certbot рекомендуют устанавливать его через snap — так вы всегда получаете актуальную версию без ручных обновлений. Сначала обновите snap:
sudo snap install core; sudo snap refresh core
Если на сервере ранее стояла старая версия Certbot из репозиториев APT, удалите её во избежание конфликтов:
sudo apt remove certbot
Установите Certbot:
sudo snap install --classic certbot
Создайте символическую ссылку, чтобы команда была доступна глобально:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Альтернатива (APT): если snap недоступен в вашей среде, можно установить Certbot из репозиториев Ubuntu:
sudo apt update && sudo apt install -y certbot python3-certbot-nginx
Snap всё же предпочтительнее — обновления выходят быстрее, и плагин для Nginx уже включён.
Шаг 2. Проверка конфигурации Nginx
Certbot ищет нужный серверный блок по директиве server_name. Прежде чем запрашивать сертификат, убедитесь, что она задана корректно.
Откройте файл конфигурации вашего домена:
sudo nano /etc/nginx/sites-available/example.com
Найдите строку с server_name. Она должна выглядеть так:
server_name example.com www.example.com;
Если всё верно, закройте редактор и переходите дальше. Если нет — исправьте, сохраните файл и проверьте синтаксис:
sudo nginx -t
При отсутствии ошибок перезагрузите Nginx:
sudo systemctl reload nginx
Шаг 3. Открытие порта 443 в файрволе
Если вы используете ufw, проверьте текущие правила:
sudo ufw status
Скорее всего, разрешён только HTTP. Добавьте профиль для HTTPS и уберите лишнее правило:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
После этого статус должен содержать строку Nginx Full ALLOW Anywhere. Проверьте:
sudo ufw status
Шаг 4. Получение SSL-сертификата
Запустите Certbot с плагином для Nginx и укажите нужные домены:
sudo certbot --nginx -d example.com -d www.example.com
Certbot запросит адрес электронной почты и согласие с условиями использования. После успешного выполнения вы увидите примерно такой вывод:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2026-09-01.
Сертификат установлен, Nginx перенастроен автоматически — весь трафик по HTTP теперь перенаправляется на HTTPS. Откройте сайт в браузере и убедитесь, что в адресной строке появился замок. Для дополнительной проверки воспользуйтесь SSL Labs Server Test — при правильной конфигурации сервер получит оценку A или A+.
Шаг 5. Проверка автоматического обновления
Сертификаты Let's Encrypt действуют 90 дней. Certbot (при установке через snap) создаёт системный таймер, который дважды в сутки проверяет срок действия и обновляет сертификаты за 30 дней до истечения.
Проверьте статус таймера:
sudo systemctl status snap.certbot.renew.timer
Проведите тестовое обновление без реального запроса к серверам Let's Encrypt:
sudo certbot renew --dry-run
Если ошибок нет — всё настроено правильно. При желании можно добавить хук для перезагрузки Nginx только после успешного обновления сертификата:
sudo certbot renew --dry-run --post-hook "systemctl reload nginx"
⚠️ При установке через APT обновлением управляет задание cron, а не systemd-таймер. Убедитесь, что нужный механизм активен в вашей среде.
Усиление конфигурации HTTPS
Базовая установка сертификата — это только начало. Чтобы по-настоящему защитить соединение, стоит сделать ещё несколько шагов.
HSTS — заголовок, который браузер запоминает и после этого открывает ваш сайт только по HTTPS, не делая запрос на HTTP:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Современные протоколы и шифры — отключите устаревшие TLS 1.0/1.1 и оставьте только надёжные наборы:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
Редирект с HTTP на HTTPS — Certbot обычно добавляет его автоматически, но при ручной настройке выглядит так:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Дополнительные меры для ещё более высокой оценки и производительности:
- Включите OCSP-stapling:
ssl_stapling on; ssl_stapling_verify on;— ускоряет проверку сертификата браузером - Настройте кеш TLS-сессий:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d;— повторные подключения будут быстрее - Включите HTTP/2: добавьте
http2к директивеlisten 443 ssl - Включите сжатие Brotli или Gzip для HTML, CSS и JS
⚠️ С HSTS и особенно с флагом preload нужно быть осторожным: браузер будет открывать сайт только по HTTPS даже при проблемах с сертификатом. Включайте его только после того, как убедитесь в стабильной работе HTTPS на всех поддоменах. Для проверки конфигурации используйте Mozilla SSL Configuration Generator и SSL Labs Server Test.
Типичные проблемы и способы их решения
ACME HTTP-01 challenge не проходит. Порт 80 должен быть открыт и доступен из интернета. Проверьте правила файрвола и настройки вышестоящего балансировщика нагрузки, если он есть.
Ошибка DNS. Убедитесь, что записи A для example.com и www.example.com указывают на правильный публичный IP. DNS-изменения могут распространяться до 48 часов.
Certbot не находит серверный блок. Проверьте, что server_name в конфигурации Nginx точно совпадает с доменами, которые вы передаёте через флаг -d.
Превышены лимиты запросов Let's Encrypt. Используйте --dry-run при тестировании — это не считается реальным запросом. При повторных ошибках подождите несколько часов.
Конфликт snap и APT. Перед установкой snap-версии удалите APT-пакет certbot, иначе возможны конфликты путей.
Ответы на частые вопросы
Нужен ли домен для получения сертификата? Да. Let's Encrypt выдаёт сертификаты только для доменов с публичными DNS-записями — IP-адреса и локальные имена не поддерживаются. Для wildcard-сертификатов (*.example.com) потребуется DNS-01 валидация.
Можно ли один сертификат выдать сразу на несколько доменов? Да. Укажите все нужные домены через флаг -d:
sudo certbot --nginx -d example.com -d www.example.com -d api.example.com
Certbot получит один SAN-сертификат на все три имени и автоматически настроит Nginx. При продлении все домены обновляются вместе.
Как проверить, что автоматическое обновление работает? Запустите sudo certbot renew --dry-run и проверьте статус таймера командой sudo systemctl status snap.certbot.renew.timer. Срок действия текущего сертификата можно посмотреть так:
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -enddate
Как убедиться, что HTTPS работает правильно? Несколько быстрых проверок из командной строки:
curl -I http://example.com # Ожидаем 301 на https
curl -I https://example.com # Ожидаем 200 и заголовок HSTS
Также откройте DevTools в браузере → вкладка Security, чтобы увидеть предупреждения о смешанном контенте, если он есть.
Заключение
Мы прошли весь путь: установили Certbot, получили бесплатный SSL-сертификат от Let's Encrypt, настроили Nginx для работы по HTTPS и разобрались с автоматическим продлением. Дополнительно усилили конфигурацию с помощью HSTS, современных шифров и OCSP-stapling.
Если вы управляете несколькими доменами или серверами, следующий шаг — автоматизация через Ansible или аналогичные инструменты, а также мониторинг сроков действия сертификатов с алертами. Но для большинства задач описанной конфигурации будет вполне достаточно.
Серверное решение, готовое к работе
Хотите развернуть безопасный сервер с HTTPS без лишних усилий? Мы предлагаем надёжные VPS и выделенные серверы, круглосуточную техническую поддержку и прозрачные тарифы.
Оставьте заявку — и начните работу уже сегодня!