Alcuni pacchetti di hosting condiviso con cPanel non offrono AutoSSL , o lo offrono solo nei piani più costosi. Di conseguenza, non è possibile emettere un certificato Let's Encrypt gratuito tramite l'interfaccia di cPanel e tutti i domini rimangono con un certificato autofirmato. Il browser visualizza la pagina come "non sicura". La soluzione: ottenere il certificato autonomamente utilizzando acme.sh e installarlo tramite l'UAPI di cPanel, con rinnovo automatico e senza bisogno di AutoSSL.
L'HTTPS è ormai obbligatorio da tempo. È quindi ancora più frustrante quando il proprio pacchetto di hosting non offre un modo pratico per ottenere un certificato gratuito. Questo accade più spesso di quanto si possa pensare, ad esempio con i pacchetti base più economici o dopo un cambio di piano che improvvisamente non include più il certificato. Tuttavia, questa lacuna può essere colmata in modo elegante e definitivo con poche righe di codice nella shell: la procedura completa è descritta di seguito.
1. Accedi tramite SSH
ssh -p <port> <user>@example.com
2. Installa acme.sh
curl https://get.acme.sh | sh -s email=me@example.com
source ~/.bashrc
3. Imposta Let's Encrypt come CA
acme.sh --set-default-ca --server letsencrypt
4. Rilascio del certificato
acme.sh --issue -d example.com -d www.example.com -w ~/public_html
5. Installare in cPanel
acme.sh --deploy -d example.com --deploy-hook cpanel_uapi
6. Verifica
uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -issuer -dates
L'hook scrive il certificato sull'host virtuale appropriato tramite UAPI. Le impostazioni di distribuzione vengono salvate: d'ora in poi, cron rinnoverà e installerà automaticamente tutto prima della scadenza. L'emittente è "Let's Encrypt" e la data di scadenza è di circa 90 giorni. Se il vecchio certificato autofirmato è ancora presente, un ricaricamento forzato della pagina nel browser di solito risolve il problema: il certificato precedente potrebbe essere temporaneamente memorizzato nella cache.
Alcuni provider di hosting utilizzano un proprio hook cPanel. install_ssl e risponde con qualcosa del tipo adminbin Cpanel/hooks2/...: exit 255. acme.sh continua a segnalare "distribuzione completata con successo" – e questo è corretto. In questo caso, l'hook fallisce a causa di una fase successiva (come una notifica interna o un'operazione di sincronizzazione da parte del provider di hosting), non a causa dell'installazione vera e propria.
Per i domini con umlaut, acme.sh memorizza internamente il certificato nel formato Punycode (xn--…), mentre l'auto-matcher dell'hook confronta la forma Unicode. Risultato: "distribuito su 0 di 0 siti" - non viene installato nulla. La cosa insidiosa è che acme.sh segnala anche "Successo" qui, quindi l'errore è facilmente trascurabile. Soluzione: lavorare direttamente con il dominio Punycode e disabilitare l'auto-matching.:
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
Con l'accesso SSH non è necessario AutoSSL: acme.sh rilascia il certificato, che cpanel_uapiL'hook lo installa e il cron job incluso lo mantiene automaticamente aggiornato. Una volta configurato, il servizio HTTPS gratuito funziona ininterrottamente da solo. Chi investe lo sforzo iniziale si risparmia ogni rinnovo manuale in futuro e può estendere la stessa soluzione a qualsiasi dominio aggiuntivo nello stesso account con un singolo comando.