Let's Encrypt DomainFactory

Некоторые пакеты общего хостинга с cPanel не предлагают AutoSSL или предлагают его только по более высоким тарифам. Результат: вы не можете выдать бесплатный сертификат Let's Encrypt через интерфейс cPanel, и все домены привязаны к самозаверяющему сертификату. Браузер отображает страницу как «небезопасную». Выход: получить сертификат самостоятельно с помощью acme.sh и установить его через cPanel UAPI — автоматически обновляясь, без AutoSSL.


Протокол HTTPS уже давно является обязательным. Поэтому особенно неприятно, когда ваш собственный хостинг-пакет не предлагает удобного способа получения бесплатного сертификата. Это случается чаще, чем вы думаете, например, с недорогими пакетами начального уровня или после смены тарифного плана, когда сертификат внезапно перестает предоставляться. Однако этот пробел можно элегантно и навсегда устранить всего несколькими строками кода в командной оболочке — полный процесс описан ниже.

1. Войдите через SSH.

ssh -p <port> <user>@example.com

2. Установите acme.sh

curl https://get.acme.sh | sh -s email=me@example.com
source ~/.bashrc

3. Установите Let's Encrypt в качестве центра сертификации.

acme.sh --set-default-ca --server letsencrypt

4. Выдача сертификата

acme.sh --issue -d example.com -d www.example.com -w ~/public_html

5. Установите в cPanel

acme.sh --deploy -d example.com --deploy-hook cpanel_uapi

6. Проверка

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

Перехватчик записывает сертификат на соответствующий виртуальный хост через UAPI. Настройки развертывания сохраняются — с этого момента cron обновляет и устанавливает все самостоятельно до истечения срока его действия. Эмитентом является Let’s Encrypt, а срок действия составляет около 90 дней в будущем. Если вместо него появляется старый самозаверяющий сертификат, обычно помогает жесткая перезагрузка в браузере — предыдущий сертификат можно временно сохранить.

Некоторые хостинг-провайдеры используют собственные механизмы перехвата cPanel. install_ssl и отвечает примерно так: adminbin Cpanel/hooks2/...: exit 255. acme.sh по-прежнему сообщает об «успешном развертывании» — и это правильно. В этом случае перехват не удается из-за последующего шага (например, внутреннего уведомления или задания синхронизации с хоста), а не из-за фактической установки.

Для доменов с умлаутами acme.sh хранит сертификат внутри себя в формате Punycode.xn--…), в то время как автосопоставитель перехватчика сравнивает форму Юникода. Результат: «развернуто на 0 из 0 сайтов» — ничего не установлено. Хитрость заключается в том, что acme.sh также сообщает здесь «Успех», поэтому ошибку легко не заметить. Решение: работайте напрямую с доменом Punycode и отключите автоматический режим.:

python3 -c "import sys;print(sys.argv[1].encode('idna').decode())" hallöle.de
acme.sh --issue -d xn--hallle-zxa.de -d www.xn--hallle-zxa.de -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--hallle-zxa.de --deploy-hook cpanel_uapi

При доступе по SSH AutoSSL не требуется: сертификат выдаёт скрипт acme.sh, который и предоставляет сертификат. cpanel_uapiС помощью параметра `-Hook` устанавливается приложение, а включенное в него задание cron автоматически обновляет его. После настройки бесплатный HTTPS-сервис работает непрерывно самостоятельно. Те, кто вкладывает первоначальные усилия, избавляются от необходимости вручную продлевать подписку в будущем и могут распространить это решение на любой дополнительный домен в той же учетной записи с помощью одной команды.

Назад