Auto SSL через certbot (Linux, nginx и Apache)
Auto SSL — подписка, по которой ваш сервер сам получает и продлевает DV-сертификаты Sectigo по протоколу ACME. В этой статье — настройка через certbot на Linux (Ubuntu, Debian, AlmaLinux) для nginx и Apache. Если вы предпочитаете acme.sh, есть отдельная инструкция.
Где взять ключи
- Войдите в личный кабинет 1host.kz/bill и откройте услугу «Auto SSL (Sectigo ACME)». Если подписки ещё нет — оформите её на странице Auto SSL.
- Нажмите «Configure Now» («Настроить»). В поле «Single Domains» перечислите домены (
example.kzиwww.example.kzсчитаются одним доменом). Для*.example.kzиспользуйте поле «Wildcard Domains» — это отдельная позиция. - Через 5–30 секунд в карточке услуги появятся четыре значения: ACME account ID, EAB MAC ID, EAB MAC key, Server URL.
В командах ниже: Server URL — https://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 из личного кабинета — поможем настроить, круглосуточно.