Помощь

Auto SSL через acme.sh

acme.sh — один shell-скрипт без зависимостей, работает на любом Linux, FreeBSD и в контейнерах. Он полностью поддерживает ACME с привязкой внешнего аккаунта (EAB), поэтому подходит для Auto SSL «из коробки». Эту же инструкцию мы используем как основу для панелей ISPmanager, FastPanel, cPanel и BitrixVM.

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

  1. В личном кабинете 1host.kz/bill откройте услугу «Auto SSL (Sectigo ACME)» (оформить можно на странице Auto SSL).
  2. Нажмите «Configure Now» («Настроить») и введите домены: обычные — в поле «Single Domains» (www и без www — один домен), wildcard — в поле «Wildcard Domains».
  3. Через 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. Храните их как пароль.

Установка acme.sh

От root (или от пользователя, у которого есть права на каталоги сайта и перезагрузку веб-сервера):

curl https://get.acme.sh | sh -s [email protected]
source ~/.bashrc
acme.sh --version

Установщик кладёт скрипт в ~/.acme.sh/ и добавляет задание cron, которое раз в сутки проверяет сроки и продлевает сертификаты. Проверить: crontab -l | grep acme.sh.

Регистрация аккаунта с EAB-ключами

acme.sh --register-account --server https://acme.sectigo.com/v2/DV \
  --eab-kid YOUR_EAB_KID --eab-hmac-key YOUR_EAB_HMAC_KEY

Это делается один раз: acme.sh сохраняет аккаунт в ~/.acme.sh/ca/acme.sectigo.com/, повторно ключи не нужны. Чтобы не писать --server в каждой команде, сделайте Sectigo сервером по умолчанию:

acme.sh --set-default-ca --server https://acme.sectigo.com/v2/DV

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

Через webroot — каталог сайта, из которого веб-сервер отдаёт /.well-known/acme-challenge/:

acme.sh --issue --server https://acme.sectigo.com/v2/DV \
  -d example.kz -d www.example.kz -w /var/www/html

Другие режимы проверки — вместо -w /var/www/html:

  • --nginx — acme.sh сам временно правит конфиг nginx на время проверки;
  • --apache — то же для Apache;
  • --standalone — поднимает свой сервер на порту 80 (веб-сервер на это время нужно остановить).

Все домены в одной команде должны быть в подписке и указывать на этот сервер. Порт 80 должен быть открыт.

Установка сертификата и перезагрузка веб-сервера

Не ссылайтесь на файлы в ~/.acme.sh/ напрямую — их структура может меняться. Скопируйте сертификат в постоянные пути и укажите команду перезагрузки; acme.sh запомнит их и будет повторять после каждого продления:

mkdir -p /etc/ssl/example.kz
acme.sh --install-cert -d example.kz \
  --key-file       /etc/ssl/example.kz/privkey.pem \
  --fullchain-file /etc/ssl/example.kz/fullchain.pem \
  --reloadcmd      "systemctl reload nginx"

В конфиге веб-сервера:

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

# Apache (reloadcmd — "systemctl reload apache2" или "httpd")
SSLCertificateFile    /etc/ssl/example.kz/fullchain.pem
SSLCertificateKeyFile /etc/ssl/example.kz/privkey.pem

Wildcard через DNS

Для *.example.kz ЦС проверяет домен по TXT-записи (dns-01), поэтому acme.sh нужен доступ к API DNS-провайдера. Пример для Cloudflare (у acme.sh больше 150 провайдеров, список — в его wiki dnsapi):

export CF_Token="токен_с_правом_на_редактирование_зоны"
export CF_Account_ID="id_аккаунта"
acme.sh --issue --server https://acme.sectigo.com/v2/DV --dns dns_cf \
  -d example.kz -d '*.example.kz'

Учётные данные сохраняются в ~/.acme.sh/account.conf, продление проходит без вашего участия. Если DNS домена обслуживают наши ns1/ns2.1host.kz, напишите в поддержку — поможем настроить DNS-проверку. Ручной режим (--dns без провайдера, добавление TXT-записи руками) для Auto SSL не рекомендуем: при каждом продлении запись придётся менять снова.

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

Список сертификатов и даты следующего продления:

acme.sh --list

Проверить, что сайт отдаёт сертификат Sectigo:

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

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

acme.sh --renew -d example.kz --force

Журнал — в ~/.acme.sh/acme.sh.log. Пока подписка активна (счёт на продление приходит за 14 дней до окончания года), ничего делать не нужно. Вопросы — в поддержку ONEHOST через личный кабинет, отвечаем круглосуточно.

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