Давайте зашифруємо DomainFactory

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


HTTPS тепер обов’язковий: тому ще більше неприємно, коли ваш власний хостинг-пакет не пропонує зручного способу отримання безкоштовного сертифіката. Це трапляється частіше, ніж ви думаєте – наприклад, із недорогими пакетами початкового рівня або після зміни плану, коли сертифікат раптово більше не включено. Однак цю прогалину можна елегантно та назавжди закрити лише кількома рядками коду в оболонці – повний процес описано нижче.

1. Увійдіть через SSH

ssh -p <port> <cpanel-user>@<host>

2. Встановіть acme.sh

curl https://get.acme.sh | sh -s email=du@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 та вимкніть автоматичне зіставлення.:

# Punycode-Form der Domain vorher ermitteln (z. B. via idn-Tool oder Online-Konverter)
acme.sh --issue -d xn--<punycode> -d www.xn--<punycode> -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--<punycode> --deploy-hook cpanel_uapi

З доступом через SSH вам не потрібен AutoSSL: acme.sh видає сертифікат, який cpanel_uapi-Hook встановлює його, а включене завдання cron автоматично оновлює його. Після налаштування безкоштовний сервіс HTTPS працює безперервно самостійно. Ті, хто вкладе початкові зусилля, заощаджують собі кожне ручне оновлення в майбутньому – і можуть розширити те саме рішення на будь-який додатковий домен у тому ж обліковому записі за допомогою однієї команди.

Назад