Давайте зашифруємо 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--…), тоді як автоматичне зіставлення хука порівнює форму 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 працює безперервно самостійно. Ті, хто вкладе початкові зусилля, заощаджують собі кожне ручне оновлення в майбутньому – і можуть розширити те саме рішення на будь-який додатковий домен у тому ж обліковому записі за допомогою однієї команди.

Назад