Certbot и Sectigo ACME для Apache и Nginx (Ubuntu, Debian, AlmaLinux)

Печать
  • 0

На Linux-VPS или выделенном сервере с Apache или Nginx программа Certbot получает сертификат Sectigo по Вашей подписке ACME, настраивает HTTPS в веб-сервере и затем сама продлевает сертификат. Понадобятся права root или sudo, поддерживаемая и обновлённая операционная система и данные ACME из услуги Sectigo ACME Certificate-as-a-Service. Ниже описаны установка, получение первого сертификата и проверка автопродления.

Перед началом

  • A-запись домена (и AAAA, если используется IPv6) указывает на этот сервер; если зона находится в TopHost, см. статью о добавлении A-записей.
  • Сайт уже открывается по HTTP, и в веб-сервере для него есть виртуальный хост с правильным именем: ServerName и ServerAlias в Apache, server_name в Nginx.
  • В файрволе сервера открыты порты 80 и 443, например командами sudo ufw allow 80/tcp и sudo ufw allow 443/tcp в Ubuntu или sudo firewall-cmd --permanent --add-service=http --add-service=https с последующим sudo firewall-cmd --reload в AlmaLinux и Rocky Linux.
  • Под рукой Server URL, EAB MAC ID и EAB MAC Key из личного кабинета.

Если на сервере установлена панель, например CyberPanel или FastPanel, она сама управляет конфигурацией веб-сервера и может перезаписать изменения Certbot. Тогда пользуйтесь SSL-инструментами панели или методом webroot, описанным ниже.

Шаг 1. Установите Certbot

Ubuntu и Debian: из пакетов дистрибутива

sudo apt update
sudo apt install certbot python3-certbot-nginx

Для Apache вместо python3-certbot-nginx установите python3-certbot-apache. Это самый простой путь, но версия может немного отставать от последней.

Ubuntu и Debian: через snap (способ, рекомендованный проектом Certbot)

sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Первая команда нужна, только если раньше Certbot ставился из пакетов. Snap обновляется сам и уже содержит плагины для Apache и Nginx.

AlmaLinux, Rocky Linux и другие системы на базе RHEL

sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx

Для Apache используйте python3-certbot-apache. В самом Red Hat Enterprise Linux сначала подключите репозиторий EPEL по документации Red Hat. Очень старые системы, где есть только yum и нет обновлений, плохо подходят для Certbot; обновите ОС, прежде чем начинать.

Проверить установку можно командой certbot --version.

Шаг 2. Получите и установите сертификат

Автоматический режим: Certbot сам настраивает веб-сервер

Для Nginx (подставьте свои данные вместо примеров):

sudo certbot --nginx \
  --server https://acme.sectigo.com/v2/DV \
  --eab-kid YOUR_EAB_MAC_ID \
  --eab-hmac-key YOUR_EAB_MAC_KEY \
  --email admin@example.com --agree-tos --non-interactive \
  -d example.com -d www.example.com \
  --cert-name example.com --redirect

Для Apache команда та же, только с --apache вместо --nginx. Certbot проверит домен по HTTP, сохранит сертификат в /etc/letsencrypt/live/example.com/ (эта папка используется для любого центра сертификации, не только для Let's Encrypt), допишет настройки HTTPS в виртуальный хост и благодаря --redirect будет перенаправлять посетителей с HTTP на HTTPS.

Ручной режим: конфигурацию правите Вы

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

sudo certbot certonly --webroot -w /var/www/example.com \
  --server https://acme.sectigo.com/v2/DV \
  --eab-kid YOUR_EAB_MAC_ID --eab-hmac-key YOUR_EAB_MAC_KEY \
  --email admin@example.com --agree-tos --non-interactive \
  -d example.com -d www.example.com --cert-name example.com \
  --deploy-hook "systemctl reload nginx"

Затем пропишите пути к файлам в виртуальном хосте. В Nginx:

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

В Apache:

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

Перед перезагрузкой проверьте конфигурацию: sudo nginx -t или sudo apachectl configtest. Параметр --deploy-hook заставляет Certbot перезагружать веб-сервер после каждого продления; для Apache укажите systemctl reload apache2 (Debian, Ubuntu) или systemctl reload httpd (семейство RHEL).

Что означают параметры

ПараметрНазначение
--nginx, --apache, --webrootСпособ проверки домена и то, настраивается ли веб-сервер автоматически
--serverКаталог ACME Sectigo (Server URL из личного кабинета)
--eab-kid, --eab-hmac-keyEAB MAC ID и EAB MAC Key; нужны только при первой регистрации ACME-аккаунта
--emailАдрес для уведомлений об аккаунте и окончании срока
--agree-tos, --non-interactiveПринять условия и работать без вопросов (удобно в скриптах)
-dИмя в сертификате; повторяется для каждого имени
--cert-nameИмя, под которым Certbot хранит и продлевает сертификат
--redirectДобавляет перенаправление с HTTP на HTTPS
--deploy-hookКоманда, выполняемая после каждого успешного продления

Шаг 3. Проверьте автопродление

И snap, и пакеты дистрибутива ставят таймер или задание cron, которое дважды в день запускает certbot renew; сертификаты продлеваются, когда срок подходит к концу. Полезные проверки:

sudo certbot certificates
systemctl list-timers | grep certbot

Первая команда показывает сертификаты, их имена и даты окончания. Чтобы один раз проверить настоящее продление, выполните sudo certbot renew --cert-name example.com --force-renewal. Часто так делать не стоит: каждый принудительный запуск выпускает новый сертификат.

Частые ошибки

  • Не найден подходящий виртуальный хост (virtual host / server block). Имени из -d нет в ServerName, ServerAlias или server_name. Добавьте его, перезагрузите веб-сервер и повторите попытку.
  • Таймаут или отказ в соединении при проверке. Порт 80 закрыт в файрволе, или DNS-запись всё ещё указывает на другой сервер.
  • 404 для проверочного файла (webroot). Путь в -w не совпадает с папкой, из которой реально отдаётся сайт, или правило в конфигурации блокирует /.well-known/acme-challenge/.
  • Ошибки unauthorized или external account binding. Данные EAB или адрес сервера скопированы не полностью, либо имени нет в списке доменов подписки.
  • Браузер показывает старый сертификат. Веб-сервер не перезагружен, или на это же имя отвечает другой виртуальный хост.

Документация Certbot: eff-certbot.readthedocs.io. Если у Вас управляемый VPS TopHost или описанные шаги не помогли, откройте тикет с командой и полным текстом ошибки, но без EAB MAC Key.

Полезные статьи

Помог ли вам данный ответ?

Нужна помощь? Позвоните нам +373 795-800-80