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