Certbot и Sectigo ACME для Apache и Nginx (Ubuntu, Debian, AlmaLinux)
ПечатьНа 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-key | EAB 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.