Niektóre pakiety hostingu współdzielonego z cPanel nie oferują AutoSSL lub oferują je tylko w droższych planach. W rezultacie nie można wystawić darmowego certyfikatu Let's Encrypt za pośrednictwem interfejsu cPanel, a wszystkie domeny są zablokowane przez certyfikat podpisany przez siebie. Przeglądarka wyświetla stronę jako „niezabezpieczoną”. Rozwiązanie: uzyskaj certyfikat samodzielnie za pomocą acme.sh i zainstaluj go za pomocą interfejsu UAPI cPanel – z automatycznym odnawianiem, całkowicie 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 na odpowiednim hoście wirtualnym za pośrednictwem UAPI. Ustawienia wdrożenia zostają zapisane – od teraz cron będzie automatycznie odnawiał i instalował wszystko przed upływem terminu ważności. Wystawcą jest „Let's Encrypt”, a data wygaśnięcia przypada za około 90 dni. Jeśli stary, samopodpisany certyfikat nadal się wyświetla, zazwyczaj pomaga twarde odświeżenie przeglądarki – poprzedni certyfikat może być tymczasowo buforowany.
Niektórzy usługodawcy hostingowi korzystają z własnego interfejsu cPanel. install_ssl i odpowiada czymś takim adminbin Cpanel/hooks2/...: exit 255. Plik acme.sh nadal zgłasza komunikat „wdrożono pomyślnie” – i to prawda. W tym przypadku hook kończy się niepowodzeniem z powodu kolejnego kroku (takiego jak wewnętrzne powiadomienie lub synchronizacja przez dostawcę hostingu), a nie z powodu samej instalacji.
W przypadku domen ze znakami umlaut, acme.sh przechowuje certyfikat wewnętrznie w formacie Punycode (xn--…), podczas gdy autodopasowanie hooka porównuje format Unicode. Wynik: „wdrożono na 0 z 0 witryn” – nic nie zostało zainstalowane. Podstępne jest to, że acme.sh również raportuje tutaj „Sukces”, więc błąd można łatwo przeoczyć. Rozwiązanie: Pracuj bezpośrednio z domeną Punycode i wyłącz autodopasowanie.:
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.