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'API UAPI di cPanel. Il certificato si rinnoverà automaticamente, senza bisogno di AutoSSL.
HTTPS è ormai obbligatorio: tanto più frustrante, quindi, 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 in cui il certificato non è più incluso. 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> <cpanel-user>@<host>
2. Installa acme.sh
curl https://get.acme.sh | sh -s email=du@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 dovrebbe essere "Let's Encrypt" e la data di scadenza dovrebbe essere di circa 90 giorni nel futuro. 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 di solito è 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, e 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.:
# 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
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.