Auto SSL через acme.sh
acme.sh — один shell-скрипт без зависимостей, работает на любом Linux, FreeBSD и в контейнерах. Он полностью поддерживает ACME с привязкой внешнего аккаунта (EAB), поэтому подходит для Auto SSL «из коробки». Эту же инструкцию мы используем как основу для панелей ISPmanager, FastPanel, cPanel и BitrixVM.
Где взять ключи
- В личном кабинете 1host.kz/bill откройте услугу «Auto SSL (Sectigo ACME)» (оформить можно на странице Auto SSL).
- Нажмите «Configure Now» («Настроить») и введите домены: обычные — в поле «Single Domains» (
wwwи безwww— один домен), wildcard — в поле «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. Храните их как пароль.
Установка 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 через личный кабинет, отвечаем круглосуточно.