Let's Encrypt DomainFactory

В некоторых пакетах общего хостинга с cPanel функция AutoSSL отсутствует или доступна только в более дорогих тарифах. В результате вы не можете получить бесплатный сертификат Let's Encrypt через интерфейс cPanel, и все домены остаются с самоподписанным сертификатом. Браузер отображает страницу как «небезопасную». Решение: получить сертификат самостоятельно с помощью acme.sh и установить его через UAPI cPanel — он будет автоматически обновляться, полностью без 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--…), в то время как автоматический сопоставитель хука сравнивает форму Unicode. Результат: "развернуто на 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-сервис работает непрерывно самостоятельно. Те, кто вкладывает первоначальные усилия, избавляются от необходимости вручную продлевать подписку в будущем и могут распространить это решение на любой дополнительный домен в той же учетной записи с помощью одной команды.

Назад