Помощь

Auto SSL через certbot (Linux, nginx и Apache)

Auto SSL — подписка, по которой ваш сервер сам получает и продлевает DV-сертификаты Sectigo по протоколу ACME. В этой статье — настройка через certbot на Linux (Ubuntu, Debian, AlmaLinux) для nginx и Apache. Если вы предпочитаете acme.sh, есть отдельная инструкция.

Где взять ключи

  1. Войдите в личный кабинет 1host.kz/bill и откройте услугу «Auto SSL (Sectigo ACME)». Если подписки ещё нет — оформите её на странице Auto SSL.
  2. Нажмите «Configure Now» («Настроить»). В поле «Single Domains» перечислите домены (example.kz и www.example.kz считаются одним доменом). Для *.example.kz используйте поле «Wildcard Domains» — это отдельная позиция.
  3. Через 5–30 секунд в карточке услуги появятся четыре значения: ACME account ID, EAB MAC ID, EAB MAC key, Server URL.

В командах ниже: Server URLhttps://acme.sectigo.com/v2/DV (он одинаков для всех клиентов), YOUR_EAB_KID — значение поля EAB MAC ID, YOUR_EAB_HMAC_KEY — значение поля EAB MAC key. Ключи — как пароль: не публикуйте их. Сертификат выдаётся только на домены, добавленные в подписку.

Что понадобится

  • Сервер с доступом root или sudo.
  • A-запись домена (и www) указывает на этот сервер.
  • Порт 80 открыт снаружи — по нему ЦС проверяет домен (http-01).
  • certbot версии 1.3 и новее: поддержка EAB появилась именно там. Мы проверяли на certbot 4.0.

Установка certbot

Ubuntu / Debian:

sudo apt update
sudo apt install certbot python3-certbot-nginx     # для nginx
sudo apt install certbot python3-certbot-apache    # для Apache

AlmaLinux / Rocky / CentOS Stream:

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

Если в репозитории старая версия, поставьте актуальную через snap: sudo snap install --classic certbot. Проверьте версию: certbot --version.

Выпуск сертификата

Регистрировать аккаунт отдельно не нужно: при первом запуске certbot создаст его сам по EAB-ключам. Проверенный нами вариант через webroot (каталог, из которого веб-сервер отдаёт /.well-known/acme-challenge/):

sudo mkdir -p /var/www/acme
sudo certbot certonly --webroot -w /var/www/acme -d example.kz -d www.example.kz \
  --server https://acme.sectigo.com/v2/DV \
  --eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY \
  --email [email protected] --agree-tos --no-eff-email

Для webroot в конфиге nginx для порта 80 должно быть:

location /.well-known/acme-challenge/ {
    root /var/www/acme;
}

Если проще, чтобы certbot сам правил конфиг веб-сервера и подключил сертификат, замените certonly --webroot -w /var/www/acme на плагин:

# nginx
sudo certbot --nginx -d example.kz -d www.example.kz \
  --server https://acme.sectigo.com/v2/DV \
  --eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY \
  --email [email protected] --agree-tos --no-eff-email

# Apache
sudo certbot --apache -d example.kz -d www.example.kz \
  --server https://acme.sectigo.com/v2/DV \
  --eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY \
  --email [email protected] --agree-tos --no-eff-email

Выпуск занимает около 20 секунд. Аккаунт сохраняется в /etc/letsencrypt/accounts/acme.sectigo.com/, поэтому при следующих выпусках и продлениях EAB-ключи указывать не нужно — достаточно --server. Несколько доменов из подписки в одном сертификате — просто перечислите их через -d; каждый должен указывать на этот сервер.

Файлы сертификата и подключение

Файлы лежат в /etc/letsencrypt/live/example.kz/: fullchain.pem (сертификат с цепочкой) и privkey.pem (закрытый ключ). Если выпускали через certonly, укажите их в конфиге вручную:

# nginx
ssl_certificate     /etc/letsencrypt/live/example.kz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.kz/privkey.pem;

# Apache
SSLCertificateFile    /etc/letsencrypt/live/example.kz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.kz/privkey.pem

Чтобы веб-сервер подхватывал новый сертификат после продления, добавьте хук перезагрузки (одноразово, certbot запомнит его в конфиге продления):

sudo certbot renew --deploy-hook "systemctl reload nginx"

Те же файлы можно подключить к почтовому серверу, панели или другому сервису — серверная лицензия не ограничена.

Типовые ошибки

  • Connection refused / Timeout при проверке — порт 80 закрыт фаерволом или домен не указывает на сервер. Проверьте dig +short example.kz и curl -I http://example.kz/.well-known/acme-challenge/test.
  • Ошибка авторизации или отказ ЦС на этапе заказа — домена нет в подписке. Добавьте его в кабинете («Add domain»), при необходимости докупите («Buy more domains»).
  • unrecognized arguments: --eab-kid — старый certbot. Обновите через snap.
  • Подписка неактивна — новые сертификаты не выпускаются, пока не оплачен счёт на продление (он выставляется за 14 дней до окончания). Уже выданные сертификаты работают до конца своего срока.

Проверка и продление

Убедитесь, что сайт отдаёт сертификат Sectigo и посмотрите срок действия:

echo | openssl s_client -connect example.kz:443 -servername example.kz 2>/dev/null \
  | openssl x509 -noout -issuer -dates
sudo certbot certificates

В строке issuer должно быть O = Sectigo Limited. Продление делает штатный таймер certbot: он запускается дважды в день и обновляет сертификаты, которым осталось меньше 30 дней. Проверьте, что таймер активен и продление проходит без ошибок:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Если вместо systemd используется cron, задание лежит в /etc/cron.d/certbot. Больше ничего делать не нужно: пока подписка активна, сертификаты будут продлеваться сами. Если что-то не получается, напишите в поддержку ONEHOST из личного кабинета — поможем настроить, круглосуточно.

Остались вопросы - пишите