SSL-сертификат Let's Encrypt: установка и автопродление

Сайты и веб-серверы
SSL-сертификат Let's Encrypt: установка и автопродление

Бесплатный SSL-сертификат Let's Encrypt давно стал стандартом: им защищено больше половины сайтов в интернете, а по уровню шифрования он ничем не отличается от платных DV-сертификатов. В этой инструкции разберём, как установить certbot на Ubuntu 24.04 LTS официальным способом — через snap, выпустить сертификат для Nginx или Apache за одну команду, получить wildcard для поддоменов и убедиться, что автопродление действительно работает. На всё уйдёт не больше 10 минут.

Как работает Let's Encrypt

Let's Encrypt — некоммерческий удостоверяющий центр, который выдаёт DV-сертификаты (Domain Validation) автоматически по протоколу ACME. Схема простая:

  1. Клиент (certbot) запрашивает сертификат для вашего домена.
  2. Центр сертификации проверяет, что вы контролируете домен: просит разместить проверочный файл на сервере (HTTP-01) или TXT-запись в DNS (DNS-01).
  3. После проверки выпускается сертификат сроком на 90 дней.
  4. Certbot автоматически продлевает его, когда до истечения остаётся 30 дней.

Короткий срок жизни — осознанное решение: даже если приватный ключ утечёт, окно для злоупотребления минимально. При настроенном автопродлении вы об этих 90 днях вообще не вспоминаете.

Что нужно перед установкой

  • VPS с публичным IPv4 и root-доступом. Подойдёт любой тариф с выделенным IP — например, Start у Cheap-Host (6 vCPU, 8 ГБ RAM, NVMe) за 450 ₽/мес.
  • Домен с A-записью, указывающей на IP сервера. DNS-изменения должны успеть распространиться — проверьте командой dig +short example.com. Подробности — в статье о привязке домена к VPS.
  • Работающий веб-сервер на порту 80. Если его ещё нет — начните с установки Nginx на Ubuntu.
  • Открытые порты 80 и 443: ufw allow 80/tcp && ufw allow 443/tcp.

Установка certbot на Ubuntu 24.04

Разработчики certbot рекомендуют ставить его именно через snap — так вы всегда получаете свежую версию, независимо от репозиториев дистрибутива. В Ubuntu 24.04 snap уже предустановлен:

snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Если раньше certbot ставился через apt, сначала удалите старую версию, чтобы не было конфликтов:

apt remove certbot

Проверяем установку:

certbot --version

Выпуск сертификата для Nginx

Самый простой сценарий — плагин Nginx. Certbot сам найдёт server-блок по имени домена, выпустит сертификат, пропишет пути к нему в конфиг и предложит настроить редирект с HTTP на HTTPS:

certbot --nginx -d example.com -d www.example.com

При первом запуске certbot спросит e-mail для уведомлений об истечении сертификата и попросит принять условия использования. После завершения проверьте сайт: https://example.com должен открываться с замком в адресной строке.

Для Apache всё аналогично, меняется только плагин:

certbot --apache -d example.com -d www.example.com

Режим webroot: сертификат без правки конфига

Если вы не хотите, чтобы certbot трогал конфигурацию веб-сервера (например, конфиг генерируется деплоем), используйте режим certonly с webroot-проверкой:

certbot certonly --webroot -w /var/www/example.com -d example.com -d www.example.com

Certbot положит проверочный файл в каталог сайта, пройдёт валидацию и сохранит файлы сертификата, не меняя ничего в Nginx. Пути к ним стандартные:

/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

Останется подключить их в server-блоке самостоятельно:

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ...
}

Wildcard-сертификат для поддоменов

Один сертификат вида *.example.com закрывает все поддомены сразу. Wildcard выпускается только через DNS-01-проверку — нужно подтвердить контроль над доменом TXT-записью:

certbot certonly --manual --preferred-challenges dns \
  -d example.com -d "*.example.com"

Certbot покажет значение TXT-записи _acme-challenge.example.com — добавьте её в панели DNS-провайдера, дождитесь распространения (проверяется командой dig TXT _acme-challenge.example.com) и продолжите.

Важный нюанс: ручной режим --manual не умеет продлеваться автоматически — каждые 90 дней запись придётся обновлять руками. Для полного автомата используйте DNS-плагины certbot (cloudflare, route53 и другие), которые сами создают TXT-записи через API вашего DNS-провайдера.

Автопродление: как проверить, что оно работает

Snap-версия certbot настраивает продление сама — systemd-таймер дважды в сутки запускает проверку и продлевает сертификаты, которым осталось меньше 30 дней. Убедимся, что таймер на месте:

systemctl list-timers | grep certbot

И прогоним тестовое продление без реального выпуска:

certbot renew --dry-run

Если в выводе Congratulations, all simulated renewals succeeded — всё настроено. Посмотреть список сертификатов и даты истечения можно так:

certbot certificates

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

certbot renew --dry-run --deploy-hook "systemctl reload nginx"

После успешного теста хук сохраняется в конфигурации продления, и дальше всё происходит без вашего участия. Плагины --nginx и --apache перезагружают веб-сервер сами — им хук не нужен.

Типичные ошибки и лимиты

ОшибкаПричинаРешение
Timeout during connectПорт 80 закрыт файрволом или занятufw allow 80/tcp, проверить ss -tlnp
DNS problem: NXDOMAINA-запись не создана или не распространиласьПроверить dig +short example.com, подождать TTL
too many certificatesПревышен лимит: 5 одинаковых сертификатов в неделюОтлаживать с --dry-run, дождаться конца окна
unauthorized 403Проверочный файл отдаёт не тот сайтПроверить server_name и корень в конфиге

Главное правило: любые эксперименты с командами проводите с флагом --dry-run — тестовый контур Let's Encrypt не считает запросы в основные лимиты.

Что настроить после установки SSL

  • Редирект на HTTPS — плагин certbot предлагает его сам; проверьте, что http://-версия отдаёт 301.
  • HTTP/2 — раз уж есть TLS, включите современный протокол: это бесплатное ускорение. Как — в статье про HTTP/2 и HTTP/3 в Nginx.
  • Оценка конфигурации — прогоните сайт через SSL Labs (ssllabs.com/ssltest): рейтинг A получается уже на дефолтных настройках certbot.
  • Мониторинг срока — certbot шлёт письма об истечении, но не помешает и внешняя проверка доступности сайта.

Отметим и требование к площадке: сертификат привязан к домену, а не к серверу, поэтому при переезде на другой VPS его можно просто выпустить заново — это займёт минуту. На серверах Cheap-Host с NVMe и выдачей за 45–60 секунд весь путь «новый сервер → сайт с HTTPS» реально пройти за полчаса, включая установку WordPress.

FAQ

Let's Encrypt действительно бесплатный? В чём подвох?

Да, полностью бесплатный. Let's Encrypt — некоммерческий центр сертификации, который существует на спонсорские взносы. Подвоха нет: шифрование такое же, как у платных DV-сертификатов. Отличия — срок 90 дней вместо года и отсутствие сертификатов с проверкой организации (OV/EV).

Чем сертификат за 90 дней хуже платного на год?

Ничем, если настроено автопродление: certbot обновляет сертификат сам, и короткий срок жизни даже безопаснее — скомпрометированный ключ быстрее выйдет из оборота.

Можно ли получить сертификат без своего сервера?

Certbot должен подтвердить контроль над доменом — через файл на сервере (HTTP-01) или DNS-запись (DNS-01). Для HTTP-01 нужен сервер с публичным портом 80, поэтому проще всего выпускать сертификат прямо на VPS, где размещён сайт.

Что делать при ошибке rate limit?

Let's Encrypt ограничивает выпуск: 50 сертификатов на домен в неделю и 5 повторных выпусков одинакового набора имён. Отлаживайте команды с флагом --dry-run — тестовые запросы в лимиты не попадают, затем подождите окончания недельного окна.

Работает ли Let's Encrypt на NAT VPS без выделенного IP?

HTTP-01 требует доступный снаружи порт 80, которого на NAT VPS обычно нет. Используйте DNS-01-проверку — она подтверждает домен через TXT-запись и не требует открытых портов. Либо возьмите VPS с выделенным IPv4, например Start у Cheap-Host за 450 ₽/мес.

Вывод

Let's Encrypt закрывает вопрос SSL раз и навсегда: одна команда на установку certbot, одна — на выпуск сертификата, и системный таймер дальше продлевает его без вас. Платить за DV-сертификат в 2026 году просто незачем. Если для сайта с HTTPS вам нужен сервер — у Cheap-Host тариф Start от 450 ₽/мес: выделенный IPv4, NVMe, KVM, безлимитный трафик и выдача сервера за минуту.

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