Niektóre pakiety hostingu współdzielonego z cPanel nie oferują AutoSSL lub oferują je tylko po wyższych stawkach. Skutek: nie można wystawić bezpłatnego certyfikatu Let's Encrypt poprzez interfejs cPanel, a wszystkie domeny utknęły na certyfikacie z podpisem własnym. Przeglądarka wyświetla stronę jako „niebezpieczną”. Wyjście: zdobądź certyfikat samodzielnie za pomocą acme.sh i zainstaluj go poprzez cPanel UAPI - automatyczne odnawianie, bez AutoSSL.
Protokół HTTPS jest obowiązkowy od dawna. Tym bardziej frustrujące jest to, że Twój pakiet hostingowy nie oferuje wygodnego sposobu uzyskania darmowego certyfikatu. Zdarza się to częściej, niż mogłoby się wydawać, na przykład w przypadku niedrogich pakietów podstawowych lub po zmianie planu, gdy certyfikat nagle przestaje być dostępny. Jednak tę lukę można elegancko i trwale wypełnić zaledwie kilkoma linijkami kodu w powłoce – cały proces opisano poniżej.
1. Zaloguj się przez SSH
ssh -p <port> <user>@example.com
2. Zainstaluj acme.sh
curl https://get.acme.sh | sh -s email=me@example.com
source ~/.bashrc
3. Ustaw Let's Encrypt jako CA
acme.sh --set-default-ca --server letsencrypt
4. Wydaj certyfikat
acme.sh --issue -d example.com -d www.example.com -w ~/public_html
5. Zainstaluj w cPanelu
acme.sh --deploy -d example.com --deploy-hook cpanel_uapi
6. Sprawdź
uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -issuer -dates
Hak zapisuje certyfikat do odpowiedniego vHosta poprzez UAPI. Ustawienie wdrażania zostało zapisane — od tego momentu cron odnawia i instaluje wszystko niezależnie, zanim wygaśnie. Emitentem jest „Let’s Encrypt”, a data wygaśnięcia przypada za około 90 dni. Jeśli zamiast tego pojawi się stary, samopodpisany certyfikat, zwykle pomaga twarde ponowne załadowanie przeglądarki - poprzedni certyfikat może zostać tymczasowo zapisany.
Niektórzy usługodawcy hostingowi korzystają z własnego interfejsu cPanel. install_ssl i odpowiada czymś takim adminbin Cpanel/hooks2/...: exit 255. acme.sh nadal zgłasza „pomyślne wdrożenie” – i to prawda. W tym przypadku przechwytywanie nie powiedzie się z powodu kolejnego kroku (np. wewnętrznego zadania powiadomienia lub synchronizacji z hosta), a nie z powodu faktycznej instalacji.
W przypadku domen ze znakami umlaut, acme.sh przechowuje certyfikat wewnętrznie w formacie Punycode (xn--…), podczas gdy funkcja automatycznego dopasowywania haka porównuje formę Unicode. Wynik: „wdrożono w 0 z 0 witryn” – nic nie zostało zainstalowane. Trudne jest to, że acme.sh również zgłasza tutaj „Sukces”, więc błąd można łatwo przeoczyć. Rozwiązanie: Pracuj bezpośrednio z domeną Punycode i wyłącz tryb automatyczny:
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
W przypadku dostępu SSH nie potrzebujesz AutoSSL: acme.sh wystawia certyfikat, który cpanel_uapiNarzędzie -Hook instaluje usługę, a dołączone zadanie cron automatycznie ją aktualizuje. Po skonfigurowaniu, bezpłatna usługa HTTPS działa nieprzerwanie i samodzielnie. Ci, którzy zainwestują początkowy wysiłek, oszczędzają sobie każdego ręcznego odnawiania w przyszłości – i mogą rozszerzyć to samo rozwiązanie na dowolną dodatkową domenę na tym samym koncie jednym poleceniem.