Гид по технологиям

Руководство по Certbot и Let's Encrypt — настройка HTTPS

• 9 min read • Безопасность • Обновлено 19 Nov 2025
Certbot и Let's Encrypt: настройка HTTPS
Certbot и Let's Encrypt: настройка HTTPS

Логотип Let's Encrypt на фоне клавиатуры

Let’s Encrypt — это автоматический и открытый центр сертификации (CA), управляемый Internet Security Research Group (ISRG) и изначально основанный при участии Electronic Frontier Foundation (EFF), Mozilla Foundation и других. Он выдаёт бесплатные SSL/TLS сертификаты, которые чаще всего используются для защиты соединений через HTTPS. Let’s Encrypt применяет протокол ACME (Automatic Certificate Management Environment) для выпуска, отзыва и обновления сертификатов. Certbot — свободная утилита с открытым исходным кодом, широко используемая для работы с сертификатами Let’s Encrypt. Certbot доступен для большинства UNIX-подобных систем, включая GNU/Linux, FreeBSD, OpenBSD и macOS. Это руководство даёт нейтральное по платформе введение в использование certbot.

Важно: Certbot развивается; поведение в старых или будущих версиях может отличаться.

Кому это руководство

  • Сисадминам, которые должны включить HTTPS для сайтов.
  • Разработчикам веб-приложений и DevOps-инженерам.
  • Владеющим доменом пользователям, желающим автоматизировать SSL.

Требования

  • Зарегистрированное доменное имя с A-записью, указывающей на IPv4-адрес сервера. В примерах используется www.example.com.
  • Доступ к привилегированной оболочке (root или sudo).

Основные понятия

Режимы работы

Использование certbot для включения HTTPS разделяется на два шага: аутентификация и установка. Первый шаг — решить challenge и сохранить сертификат и связанные файлы. Шаг установки — настроить и закрепить конфигурацию веб-сервера. Certbot может автоматически выполнить оба шага через команду run. Подкоманды certonly и install соответствуют аутентификации и установке.

Certbot также поддерживает обновление и отзыв сертификатов.

Challenge

Чтобы получить сертификат, ACME-сервер Let’s Encrypt выдаёт challenge для проверки владения доменом. Наиболее распространённый — HTTP-01. Он требует ответа по HTTP на порт 80. DNS-01 — альтернативный challenge, использующий TXT-запись в DNS и необходимый для wildcard-сертификатов. Обратите внимание: wildcard-сертификаты нельзя получить через HTTP-01.

Кратко о типах challenge:

  • HTTP-01: проверка через HTTP на порт 80. Прост в настройке при наличии веб-сервера.
  • DNS-01: проверка через DNS TXT. Необходим для *.example.com.
  • TLS-ALPN-01: проверка через TLS альпн (менее распространён, для специальных сценариев).

Плагины

Certbot использует плагины для аутентификации и установки сертификатов. Плагины webroot и standalone выполняют только аутентификацию. Плагины apache и nginx умеют автоматически получить и установить сертификат, правя конфиги веб-сервера. Для DNS-01 есть набор vendor-специфичных DNS-плагинов, которые дают автоматизацию при наличии API у DNS-провайдера. Webroot и standalone встроены; многие другие плагины устанавливаются отдельно.

Установка Certbot

Большинство дистрибутивов Linux поставляют certbot в официальных репозиториях. Ниже — инструкции для популярных платформ.

Debian и Ubuntu:

apt update
apt install -y certbot

CentOS 7:

yum install -y certbot

Fedora и CentOS 8:

dnf install -y certbot

Arch Linux:

pacman -Sy certbot

FreeBSD:

pkg install py36-certbot

OpenBSD 6.0 и новее:

pkg_add certbot

macOS (Homebrew):

brew install letsencrypt

Если пакета нет для платформы, можно использовать официальный скрипт-обёртку certbot-auto (проверьте актуальность и поддерживаемость перед применением).

Использование Certbot

Просмотр сертификатов

Команда показывает сертификаты, которыми управляет certbot на сервере:

certbot certificates

Вы увидите пути к файлам, дату окончания срока действия и имя сертификата.

Получение сертификата для ручной конфигурации

Есть два основных варианта для получения сертификата, если вы хотите настроить веб-сервер вручную:

  1. Webroot: certbot размещает challenge-файлы в корне сайта.
  2. Standalone: certbot запускает временный HTTP-сервер, слушающий порт 80.

Будьте последовательны: для удобства обновлений используйте тот же плагин, что и при выпуске.

Использование существующего веб-сервера (webroot)

Перед запуском убедитесь, что веб-сервер работает и слушает порт 80.

certbot certonly --webroot

Вас попросят указать домены и путь к webroot (по умолчанию /var/www/html/ на многих системах). Можно передать параметры в командной строке:

certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m [email protected] -d www.example.com

Использование standalone

Для standalone убедитесь, что порт 80 свободен. Проверить можно так:

ss -lntp 'sport = 80'

Если процесс занимает порт, остановите его. Затем запустите:

certbot certonly --standalone

После выдачи сертификата настройте веб-сервер вручную. Файлы будут в /etc/letsencrypt/live/your_domain.

Автоматическая установка HTTPS (интерактивно)

Certbot умеет автоматизировать полную установку HTTPS с помощью плагинов для Apache и Nginx. Установите соответствующий плагин и выполните certbot run –PLUGIN_NAME. Пример для Apache на Debian 10:

apt install -y python-certbot-apache
certbot run --apache

Certbot попытается распарсить конфигурацию веб-сервера, предложит выбрать домены и спросит про перенаправление HTTP на HTTPS. Рекомендуется включать перенаправление для новых сайтов.

Пример интерактивного выбора домена:

Which names would you like to activate HTTPS for?
1: www.example.com
Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1

Пример вопроса о редиректе:

1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

После успешного завершения certbot сообщает о включении HTTPS.

Продление сертификатов

Сертификаты Let’s Encrypt действуют 90 дней. Certbot обновляет их автоматически, но важно понять нюансы.

Ручное продление

Команда renew проверит все сертификаты и обновит те, у которых срок действия менее 30 дней:

certbot renew

Если при выдаче использовался standalone, для продления нужно освободить порт 80. Это удобно решить хуками:

certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"

Автоматическое продление

Многие дистрибутивы включают автоматическое продление через systemd-timers или cron. Проверьте запущенные таймеры:

systemctl list-timers

И наличие cron-заданий:

ls /etc/cron*

Если использовался webroot, автоматическое продление обычно проходит без дополнительных действий. Для standalone нужно либо настроить хуки, либо использовать иной плагин для автоматизации.

Важно: проверьте логи обновления и почту root — certbot отправляет уведомления при ошибках.

Отзыв сертификатов

Команда для отзыва сертификата по имени или по пути:

certbot revoke --cert-name cert_name
certbot revoke --cert-path /path/to/cert.pem

Например:

certbot revoke --cert-name www.example.net

После отзыва certbot спросит, удалять ли файлы сертификата. Если не удалять, сертификат можно будет случайно обновить на следующем цикле.

Опции revoke:

  • –delete-after-revoke
  • –no-delete-after-revoke
  • –reason [unspecified,keycompromise,affiliationchanged,superseded,cessationofoperation]

Wildcard-сертификаты

Wildcard-сертификаты (*) покрывают все поддомены на одном уровне. Для получения wildcard требуется DNS-01 challenge и доступ к управлению DNS.

Пример запроса wildcard вручную:

certbot certonly --manual --preferred-challenges dns-01 -d *.example.net

Certbot покажет значение для TXT-записи _acme-challenge.example.net. Создайте TXT-запись в DNS и дождитесь распространения, затем нажмите Enter. После успешной проверки файлы будут сохранены в /etc/letsencrypt/live/example.com/.

Для автопроцесса используйте DNS-плагины провайдера (если у провайдера есть API): они автоматизируют создание TXT-записей.

Важно: некоторые провайдеры DNS имеют долгий TTL и замедляют проверку. Планируйте ожидание при первом выпуске.

Практические сценарии и примеры

Пример конфигурации Nginx (ручная установка)

Типичная минимальная конфигурация для использования сертификатов из /etc/letsencrypt/live/example.com:

server {
    listen 80;
    server_name www.example.com example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    root /var/www/html;
    index index.html index.php;
}

После обновления сертификата перезапуск Nginx не обязателен, если используется symlink в /etc/letsencrypt/live. Но некоторые приложения требуют перезагрузки — проверьте поведение.

Пример конфигурации Apache (ручная установка)

Пример vhost для Apache:


    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www/html
    RewriteEngine on
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]



    ServerName www.example.com
    ServerAlias example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    DocumentRoot /var/www/html

Если вы используете Apache-плагин certbot, он создаст аналогичный ssl-vhost автоматически.

Безопасность и жесткая конфигурация

  • Храните приватные ключи в системе с ограниченным доступом (root только).
  • Используйте минимально необходимые права на каталоги /etc/letsencrypt и их содержимое.
  • Включите HTTP Strict Transport Security (HSTS) осторожно: сначала убедитесь, что HTTPS работает на всех хостах.
  • Отключите устаревшие протоколы (SSLv3, TLS 1.0, TLS 1.1).
  • Настройте современный набор шифров; отдавайте предпочтение TLS 1.3 там, где доступно.
  • Регулярно проверяйте конфигурацию через SSL Labs или аналогичные инструменты.

Пример заголовков безопасности для Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header Referrer-Policy no-referrer-when-downgrade;

Важно: HSTS с includeSubDomains и preload необратимы для доменов в публичных списках — применяйте с осторожностью.

Отладка и распространённые ошибки

  • Проверка порта 80: если standalone не может привязать порт, проверьте, запущен ли уже веб-сервер.
  • Ошибка валидации HTTP-01: убедитесь, что challenge-файл доступен по http://your-domain/.well-known/acme-challenge/
  • DNS-01 ошибки: проверьте, что TXT-запись создана под правильным именем (_acme-challenge) и что запись уже пропагировала.
  • Проблемы с правами: certbot должен иметь доступ на запись в webroot и чтение/запись в /etc/letsencrypt.
  • Синтаксические ошибки в веб-сервере мешают автоматическому конфигурированию плагинами.

Диагностика:

  • Просмотрите логи certbot: обычно /var/log/letsencrypt/letsencrypt.log
  • Используйте curl для проверки доступности challenge-файла:
curl -v http://www.example.com/.well-known/acme-challenge/
  • Проверяйте DNS через dig или host:
dig TXT _acme-challenge.example.com +short

Когда Certbot не подходит

  • Если у вас нет доступа к серверу или к DNS-привилегиям, certbot не поможет.
  • Для нестандартных HTTP-портов HTTP-01 не работает — нужен DNS-01 или иной CA.
  • В средах со строгой политикой безопасности без возможности открытия порта 80 потребуется координация с сетевой командой.

Альтернативные подходы

  • Использовать commercial CA с длительным сроком действия.
  • Автоматизировать через ACME-клиенты других проектов (acme.sh, lego) — они могут поддерживать дополнительные провайдеры DNS или языки.
  • Использовать CDN с автоматическим TLS (Cloudflare, Fastly) и настроить origin TLS.

Чек-листы по ролям

Сисадмин — быстрый чек-лист:

  • Убедиться, что домен указывает на сервер.
  • Проверить доступность порта 80.
  • Установить certbot и нужные плагины.
  • Выпустить тестовый сертификат (staging перед production).
  • Настроить автоматическое продление и хуки.
  • Настроить мониторинг/оповещения на ошибки обновления.

DevOps — задачи в CI/CD:

  • Автоматизировать deployment certbot для тестовой среды.
  • Хранить секреты API провайдера DNS в vault.
  • Проверять конфигурацию веб-сервера перед выпуском сертификата.

Разработчик приложения:

  • Проверить, что ссылки на ресурсы (mixed content) используют HTTPS.
  • Убедиться в корректной работе HSTS и редиректов.

Модель принятия решения (мермейд-диаграмма)

flowchart TD
  A[Нужно включить HTTPS?] --> B{Есть доступ к DNS API?}
  B -- Да --> C[Использовать DNS-01 с автоматизацией]
  B -- Нет --> D{Можно ли открыть порт 80?}
  D -- Да --> E[Использовать HTTP-01 'webroot или standalone']
  D -- Нет --> F[Нужна координация с провайдером/инфраструктурой]
  C --> G[Настроить автоматическое обновление]
  E --> G
  F --> H[Рассмотреть CDN или коммерческий CA]

Критерии приёмки

  • Сайт доступен по HTTPS без предупреждений в браузере.
  • Сертификат выдан для нужного домена и включает нужные SAN.
  • Перенаправление с HTTP на HTTPS работает корректно.
  • Автоматическое продление настроено и протестировано (dry-run).

Мини-методология для внедрения HTTPS (шаги)

  1. Проверить, что домен указывает на сервер и доступен по HTTP.
  2. Установить certbot и выбрать плагин (webroot, standalone или DNS).
  3. Выпустить тестовый сертификат в staging среде.
  4. Выпустить production-сертификат и проверить работу сайта.
  5. Настроить автоматическое продление и оповещения.
  6. Внедрить заголовки безопасности и провести внешнюю проверку.

Совместимость и советы по миграции

  • При переходе с самоподписанных сертификатов удалите старые конфигурации, чтобы избежать конфликта путей.
  • Если у вас несколько серверов, используйте один источник истины для ключей или автоматизируйте распространение через Ansible/Chef.
  • Для контейнеризированных приложений рассматривайте sidecar или ingress-контроллер (например, cert-manager в Kubernetes).

Глоссарий (1 строка)

  • ACME: протокол для автоматизированного управления сертификатами.
  • Webroot: метод HTTP-01, где challenge-файлы кладут в корень сайта.
  • Standalone: плагин certbot, который запускает временный HTTP-сервер.
  • DNS-01: challenge, основанный на проверке TXT-записи.

Ресурсы

  • Official Certbot Github repository
  • Automatic Certificate Management Environment (ACME) RFC 8555
  • EFF Certbot Documentation
  • Certbot(1) Man Page

Важно: тестируйте сначала в staging-среде Let’s Encrypt, чтобы избежать лимитов и ошибок при разработке.

Краткое резюме

Certbot — надёжный инструмент для автоматизации получения и обновления сертификатов Let’s Encrypt. Выберите подходящий плагин в зависимости от доступа к серверу и DNS, настройте автоматическое продление и следуйте рекомендациям по безопасности. Если требуются wildcard-сертификаты, используйте DNS-01 и автоматизацию через DNS-плагины.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро