Come installare un certificato SSL da Let’s Encrypt su uno shared server usando acme.sh

Share this:

Come installare un certificato SSL di Let’s Encrypt quanto l’hosting non lo supporta? I certificati SSL sono diventati praticamente obbligatori per un sito web da quanto Google nel 2017 ha deciso di premiare i siti web raggiungibili tramite procollo sicuro HTTPS, penalizzando gli altri con messaggi che intimidivano l’utente durante la navigazione.

Dopo pochi mesi, anche altri browser, come Firefox, seguirono le orme di Google, alla ricerca di un web più sicuro: di qui la necessità di installare un certificato SSL su praticamente ogni sito web.

Abbiamo già visto alcune possibili soluzioni all’avviso questa connessione non è sicura comparso su tutti i maggiori browser, dove parlavamo appunto dei certificati gratuiti di Let’s Encrypt, una Certificate Authority (CA) gratuita e open source sostenuta dall’Internet Security Research Group.

Questi certificati sono diventati in breve tempo molto diffusi e tanti hosting provider li includono nel setup dei loro server come soluzione gratuita, evitando così un aumento dei costi, mentre solo una minoranza ha deciso di offrire soluzioni alternative, come ad esempio Aruba, che offre un certificato DV per dominio firmato dalla propria CA, oppure Namecheap, che offre un certificato Comodo PositiveSSL gratuito, ma solo per il primo anno.

Ora, dover pagare da 9 a 19€ all’anno in più per un certificato SSL DV può essere una scocciatura per molti. Vediamo quindi come utilizzare ed automatizzare l’installazione di certificati SSL Let’s Encrypt su shared server con cPanel.

Hosting con cPanel, ma senza SSL gratuito: come fare?

Per procedere all’installazione del nostro certificato SSL Let’s Encrypt sul nostro shared server, dobbiamo prima verificare che:

  • Il nostro shared server abbia cPanel come pannello di controllo, e non una soluzione proprietaria
  • Il nostro shared server ci permetta l’accesso via SSH, anche jailed

A questo punto, come prima cosa dobbiamo attivare l’accesso SSH.

Attivare l’accesso SSH su uno shared server con cPanel

In genere, tutti i server condivisi con cPanel consentono l’accesso via SSH. Se non siamo sicuri che il nostro hosting provider lo permetta, o non troviamo sul nostro cPanel le stesse icone che vedete qui sotto, possiamo contattare il loro supporto tecnico per avere conferma.

Abilitare l’accesso SSH su uno shared server con cPanel è una cosa piuttosto semplice. Una volta loggati sul nostro cPanel, cerchiamo la voce “Manage Shell”:

L’icona “Manage Shell” in cPanel3 è sempre la stessa, a meno che l’hosting provider non abbia implementato una soluzione proprietaria

Una volta cliccato, possiamo verificare se l’accesso SSH è già abilitato, oppure abilitarlo noi: basterà attivare l’opzione cliccando sul selettore indicato in figura.

Cliccando sul selettore in figura, abiliteremo l’accesso SSH.

Una volta abilitato l’accesso SSH, verranno indicati sotto i parametri di connessione. Dobbiamo prendere nota di tutti e tre:

  • Indirizzo IP: è un numero del tipo 123.123.123.123 ed è l’indirizzo del nostro server.
  • Username: l’username che useremo per accedere. Normalmente coincide con l’username di cPanel.
  • SSH port: una “porta” è una sotto-coordinata del server che indica dove è possibile attivare la connessione SSH

Installare Acme.sh per la gestione dei certificati Let’s Encrypt sul nostro shared server

Per gestire i nostri certificati SSL, utilizzeremo acme.sh, uno script shell (cioè che lavora su terminale/ssh) in grado di effettuare tutte le operazioni necessarie in modo abbastanza facile. Prima di poterlo utilizzare, dobbiamo però installarlo, e questo è possibie seguendo questa guida, su cui si basa tutto il nostro tutorial.

Per prima cosa, se siamo su Windows, dovremmo utilizzare un client SSH: le ultime versioni di Windows 10 integrano openSSH direttamente nella sua powershell, mentre per versioni precedenti dovremmo riferirci a PuTTY. In questa guida, useremo powershell.

Per aprire la PowerShell, clicchiamo su cerca, scriviamo “powershell” ed apriamo la Windows Powershell! Ci troveremo davanti a questa finestra.

Ecco la schermata tipica della nostra PowerShell. Il colore di sfondo può variare, ma è la stesa cosa

Per installare acme.sh, dobbiamo prima connetterci al nostro server. Questo si fa scrivendo i seguenti comandi:

ssh -l {username_cpanel} -p {porta_ssh} {server_ip}

Ovviamente, dovrete sostituire i segnaposto nelle parentesi quadre con i valori reali (omettendo le parentesi). Uscirà fuori una cosa del genere:

ssh -l utentecpanel -p 21098 123.123.123.123

Premete invio. A questo punto, su alcuni server, subito dopo potrebbe venirci richiesto di accettare un certificato RSA non autenticato: se siamo sicuri di aver inserito correttamente IP e username, diamo conferma scrivendo yes. Dopodiché ci verrà chiesta la nostra password, che è la stessa che usiamo per accedere a cPanel: inseriamola (nb: per la password, se non vedi caratteri comparire sulla schermata è normale).

Siamo connessi!

Ecco un esempio reale. Abbiamo ovviamente nascosto le informazioni per la connessione, ma dovresti comunque capire.

A questo punto, scriviamo:

curl https://get.acme.sh | sh

E premiamo invio. Se abbiamo fatto tutto correttamente, ci troveremo di fronte a questa schermata:

Dopo aver lanciato il comando, acme.sh fa tutto da solo per l’installazione.

Ora, prima di andare avanti, l’unica cosa da fare è chiudere la connessione SSH e riconnettersi al server come fatto all’inizio.

Per disconnetterci dal server, basta scrivere logout.

Creare un utente Let’s Encrypt e generare il nostro primo certificato con Acme.sh

Per poter usare Let’s Encrypt, dobbiamo come prima cosa creare un utenza, in modo tale che futuri aggiornamenti del certificato vengano notificati all’indirizzo e-mail inserito nei loro record. Questo lo facciamo sempre tramite Windows PowerShell (o PuTTY o terminal se siamo su *nix) dai comandi di Acme.sh. Quindi, una volta riconnessi al nostro server, possiamo scrivere:

acme.sh --register-account --accountemail {il nostro indirizzo qui}

Ovviamente, come per prima, dobbiamo inserire un nostro indirizzo e-mail di preferenza per le notifiche al posto delle parentesi graffe. Se abbiamo un nostro dominio, potremmo creare una casella ad-hoc, come ssl@nostrodominio.it ed usare quella. Possiamo fare come ci pare insomma.

Nel mondo reale, questa cosa si traduce in questo screenshot:

Dopo esserci disconnessi e riconnessi, abbiamo registrato un utente Let’s Encrypt.

Come ultima cosa prima di generare il nostro certificato, dobbiamo verificare che sia tutto OK perché a questo punto acme.sh dovrebbe aver creato anche un cronjob sul nostro server che serve a verificare la data di scadenza, ed eventualmente rinnovare i certificati.

Cos’è un cronjob su cPanel? Niente altro che un lavoro a tempo: significa che acme.sh controlla ogni giorno se ci sono certificati da rinnovare. Quindi scriviamo:

crontab -l | grep acme.sh

Il risultato dovrebbe essere il seguente:

Rispetto allo screenshot qui sopra, ovviamente, alcune cose possono variare, come per esempio la directory indicata (/home/…/…), ma con le dovute distinzioni questo è quello che dovete vedere.

Creiamo il nostro primo certificato SSL Let’s Encrypt con Acme.sh

Adesso è tutto pronto per creare il nostro primo certificato SSL firmato da Let’s Ecrypt. Ecco il comando da lanciare su PowerShell:

acme.sh --issue --webroot {root directory del dominio} -d {indirizzo web del dominio} --server letsencrypt --force

Che nella realtà si traduce in:

Ecco il comando scritto: una volta verificati tutti i parametri, possiamo premere invio.

NOTA: Da Agosto 2021 Acme.sh ha modificato la certificate authority di base in ZeroSSL. Per evitare di utilizzare ZeroSSL, che pure essendo gratuito ha alcuni limiti rispetto ai certificati emissibili, è necessario utilizzare il parametro –server letsencrypt, oppure potete impostare una nuova CA di default utilizzando il comando –set-default-ca –server letsencrypt.

Fate molta attenzione a digitare correttamente la root del vostro dominio: molto spesso è semplicemente /home/nomedominio.com, oppure /home/public_html/, o ancora /home/www/. Nel nostro caso era piuttosto lunga perché stavamo installando il certificato su un sottodominio.

TIP: Potete verificare la root del dominio sia dal FileManager del vostro cPanel, sia digitando su terminale:

uapi DomainInfo single_domain_data domain={tuodominio.ext} | grep documentroot

Ovviamente sostituendo le parentesi graffe col dominio. Sul terminale, comparirà quindi la webroot esatta del dominio in questione.

Se abbiamo scritto tutto bene (rispetto allo screenshot di sopra), premiamo invio: compariranno una serie di codici, con delle indicazioni sulla posizione del certificato nel nostro server in verde. Questo se è andato tutto bene, altrimenti dobbiamo verificare cosa abbiamo sbagliato.

Installiamo il nostro primo certificato Let’s Encrypt con Acme.sh

Dopo aver creato un certificato, questo va installato sul dominio, altrimenti non serve a niente. Per installarlo, usiamo il comando:

acme.sh --deploy --deploy-hook cpanel_uapi --domain {tuodominio.ext}

Questo stesso comando verrà utilizzato da acme.sh per rinnovare il certificato ogni 90 giorni, tramite il cronjob impostato da acme stesso all’inizio! Ecco di seguito il risultato:

Abbiamo finito: il nostro certificato Let’s Encrypt è stato installato!

Se visitiamo il dominio in questione, dopo pochi secondi questo sarà raggiungibile via protocollo HTTPS! Non ci resta quindi che impostare un redirect da http ad https per tutte le visite in entrata, e saremo sicuri che tutti i nostri visitatori avranno la certezza di visitare il sito da una connessione criptata.

Share this:

Lascia un commento