Let's Encrypt DomainFactory

Alcuni pacchetti di hosting condiviso con cPanel non offrono AutoSSL o lo offrono solo a tariffe più elevate. Il risultato: non è possibile emettere un certificato Let's Encrypt gratuito tramite l'interfaccia cPanel e tutti i domini sono bloccati su un certificato autofirmato. Il browser visualizza la pagina come “non sicura”. La via d'uscita: ottieni tu stesso il certificato con acme.sh e installalo tramite cPanel UAPI - rinnovo automatico, senza 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 nel vHost appropriato tramite UAPI. L'impostazione di distribuzione viene salvata: da ora in poi il cron rinnova e installa tutto in modo indipendente prima della scadenza. L'emittente è "Let's Encrypt" e la data di scadenza è di circa 90 giorni nel futuro. Se invece viene visualizzato il vecchio certificato autofirmato, di solito è utile un ricaricamento nel browser: il certificato precedente può essere temporaneamente memorizzato.

Alcuni provider di hosting utilizzano un proprio hook cPanel. install_ssl e risponde con qualcosa del tipo adminbin Cpanel/hooks2/...: exit 255. acme.sh riporta ancora “distribuito con successo” – e questo è corretto. In questo caso, l'hook fallisce a causa di un passaggio successivo (ad esempio una notifica interna o un processo di sincronizzazione dall'host), non a causa dell'installazione effettiva.

Per i domini con umlaut, acme.sh memorizza internamente il certificato nel formato Punycode (xn--…), mentre l'auto-matcher dell'hook confronta il formato Unicode. Risultato: “distribuito su 0 di 0 siti” – non è installato nulla. La cosa complicata è che acme.sh riporta anche qui “Success”, quindi l’errore viene facilmente trascurato. Soluzione: lavora direttamente con il dominio Punycode e disattiva la modalità automatica:

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.

Indietro