You are here

Let's Encrypt: installare SSL gratuito su hosting condiviso

Inviato da giovanninews on Dom, 06/11/2016 - 12:08

Il logo di Let's Encrypt Il Certificato SSL (Secure Socket Layer) o meglio ancora il Certificato TLS (Transport Layer Security) che ne è il successore, deve ora essere chiamato Certificato SSL/TLS.

Mentre prima il Certificato SSL era rilasciato solo a pagamento, da un paio di anni esistono Autorità certificate che lo rilasciano gratuitamente.

Qualche anno fa, alcuni esponenti dell' open source, in particolare di Mozilla Foundation e di Università, iniziarono lo sviluppo di un client open source al fine di incrementare la sicurezza online attraverso un Certificato SSL/TLS libero da utilizzare e soprattutto semplice da installare, configurare e rinnovare.

Nacque il progetto Let's Encrypt che alla fine del 2015 rilasciò la sua prima beta pubblica del Certficato SSL/TLS, migliorato sempre più nel corso del 2016.

Let's Encrypt rilascia il proprio Certificato SSL/TLS attraverso il protocollo ACME (Automated Certificate Management Environment) che consiste in una serie di sfide di risposte (challenge-response) che il web server di Let's Encrypt richiede al client al fine di dimostrare che si è il proprietario del dominio per il quale si richiede il rilascio del Certificato SSL/TLS.

Il protocollo ACME prevede anche altri tipi di risposte che in futuro Let's Encrypt potrebbe adottare, ovvero challenge a livello di DNS; in futuro Let's Encrypt potrebbe ad esempio richiedere di inserire un record TXT nella configurazione del proprio server DNS.

Il Certificato SSL/TLS di Let's Encrypt è quindi rilasciato al dominio, indifferentemente se questo è su server dedicato o server condiviso.

Bisogna inoltre sottolineare che il Certificato SSL/TLS rilasciato da Let's Encrypt, a differenza di altri certificati, ha una validità di tre mesi. Questo significa che più frequentemente di altri, dovremo pensare al rinnovo del certificato, procedura che dovrebbe essere più semplice del rilascio ma che potrebbe certamente nascondere altre insidie.

Una durata inferiore del Certificato SSL, seppure più impegnativa, ha secondo me il presupposto di una sicurezza maggiore perchè necessita di controlli più frequenti.

Un consiglio per l' hosting condiviso, seppure non necessario

Ho visto siti web hostati su server condivisi che hanno ottenuto il rinnovo del Certificato SSL, ma ne ho anche visti altri che il rinnovo non l' hanno ottenuto.

Anche se il Certificato SSL/TLS di Let's Encrypt è rilasciato al dominio, con e senza il prefisso www, in fase di autenticazione del dominio è richiesta la conferma dell' indirizzo I.P. dove il dominio viene rilevato.

Seppure è possibile installare un certificato SSL su un server condiviso, è mia opinione che si dovrebbe avere un indirizzo I.P. dedicato; aggiungere quindi una trentina di euro l' anno per l' acquisto di un I.P. dedicato.

Se questo non è possibile, si dovrebbe avere almeno la garanzia che il proprio hosting non cambi frequentemente l' indirizzo I.P. del server condiviso. L' indirizzo I.P. dedicato garantisce che il dominio risponde sempre allo stesso indirizzo, anche per un possibile cambio di I.P. del server condiviso.

La procedura descritta di seguito per il rilascio del Certificato SSL/TLS di Let's Encrypt a domini hostati sia su server condivisi che su server dedicati, pur se effettivamente potrebbe sembrare semplice, nasconde in realtà delle conoscenze avanzate ad esempio per la configurazione del file .htaccess.

Ottenere il Certificato SSL/TLS di Let's Encrypt ed installarlo sul server, è inoltre solo il primo passo per arrivare ad una configurazione ottimale di un sito web che lavora con il protocollo https.

Pur se questo articolo è stato da me scritto da tempo, e cioè dopo il primo rilascio del certificato, ho aspettato il rinnovo del certificato per pubblicarlo, al fine di inquadrare al meglio i problemi rilevati.

Vi è inoltre una considerazione da fare sui servizi di hosting, che nel frattempo si sono mossi al fine di sfruttare commercialmente le opportunità offerte gratuitamente da Let's Encrypt. Un server condiviso non ha generalmente il client di Let's Encrypt installato su server, quindi i servizi di hosting offrono un servizio di migrazione a pagamento su server condivisi che hanno il client installato.

La procedura indicata di seguito, presuppone un server condiviso dove il client di Let's Encrypt non è installato, quindi con la procedura si installerà il client di Let's Encrypt in locale, si richiederà il certificato da locale per il dominio indicato e quindi si trasferiranno su server remoto i certificati ottenuti in locale.

La procedura è in continuo sviluppo dalla comunità Open Source al fine di renderla più semplice, sia in fase di richiesta del certificato SSL che in fase di rinnovo, per cui avendo avuto modifiche sul client installato in locale tra la fase del rilascio e la fase del rinnovo (il client installerà automaticamente gli aggiornamenti quando si accorgerà che ci sono), la procedura potrebbe in alcuni casi non funzionare, soprattutto in fase di rinnovo.

Per questo indicherò alla fine la documentazione da cui ho attinto in modo che potrete vedere le varie possibilità di installazione e rinnovo del certificato SSL.

Esiste inoltre nel sito di Let's Encrypt un forum molto attivo per la comunità e la rete è strapiena di documentazione.

Richiedere ed installare il Certificato SSL/TLS di Let's Encrypt su server condiviso tramite client installato in locale

La procedura da me adottata è stata quella di generare il Certificato SSL/TLS di Let's Encrypt in locale e quindi installarlo sul server. Per fare questo è necessario avere un P.C. collegato ad Internet con:

  1. Un sistema operativo Linux per installare ed eseguire il client di Let's Encrypt; nel mio caso ho utilizzato Lubuntu, la versione più leggera di Ubuntu, in quanto disponevo di un vecchio P.C. con Windows XP installato con il collegamento ad Internet. Se si dispone di un solo P.C. con Windows, è necessario installare su questo il nuovo sistema operativo. L' installazione di un sistema operativo Linux, rileva automaticamente Windows, crea la partizione per il nuovo sistema operativo, si installa e crea il dual boot. Ai neofiti di Linux come me, consiglio, in fase di richiesta del certificato SSL, di avere sotto mano la pagina ufficiale di Amministrazione Sistema > Sudo di Ubuntu.
  2. Accesso al cPanel del nostro servizio di hosting (con interfacce diverse tipo Plesk non so come funziona); il cPanel deve consentire l' accesso manuale alla gestione dei certificati SSL.
  3. Client FTP per creare nella root del nostro sito web la directory e trasferire i files .txt successivamente indicati per la verifica della proprietà del dominio. Ho usato Filezilla.
  4. Naturalmente un browser web.

Quindi, installiamo il Client di Let's Encrypt, accedendo al terminale di LUbuntu (LXTerminal) e digitando

git clone https://github.com/Letsencrypt/letsencrypt

Una volta fatto, passiamo alla directory dove il client è stato installato. Nel mio caso

cd letsencrypt

A questo punto bisogna richiedere il Certificato; all' interno della directory letsencrypt, digitare

./letsencrypt-auto certonly -a manual --rsa-key-size 4096 -d example.com -d www.example.com

naturalmente cambiando example.com con il dominio esatto del proprio sito.

Nel client verrà chiesto l' OK per la registrazione dell' indirizzo IP rilevato. Scegliere OK.

Non premere ancora nulla o sarà necessario riavviare il processo di richiesta del certificato.

Notare che sotto la richiesta di conferma vi è una istruzione su come confermare la proprietà del dominio:

Make sure your web server displays the following content at
http://example.com/.well-known/acme-challenge/ygL_TSRBbhGM354C9YSxa8JiK45Lj2dYjR7OM41oRTOT
before continuing:
ygL_TSRBbhGM354C9YSxa8JiK45Lj2dYjR7OM41oRTOT.aTrbjM_-
YNUbraC3JoYOVOsRBUoESEDuIuyKe_yffjr

Aprire il client FTP e connettersi al server del nostro sito web; nella root del proprio dominio creare la directory .well-known/acme-challenge/

All' interno della directory trasferire un file di testo denominato ygL_TSRBbhGM354C9YSxa8JiK45Lj2dYjR7OM41oRTOT

che contiene la stringa ygL_TSRBbhGM354C9YSxa8JiK45Lj2dYjR7OM41oRTOT.aTrbjM_-YNUbraC3JoYOVOsRBUoESEDuIuyKe_yffjr

Naturalmente, sia il file che la stringa, per Voi saranno diversi.

Dopo avere effettuato la verifica con un browser web (aver verificato che l' indirizzo indicato visualizza il file descritto), tornare al terminale e premere il tasto Enter.

Let's Encrypt genererà un altro testo di Conferma come quello di sopra e chiederà una ulteriore verifica per un altro file di testo che dovrete quindi creare e trasferire.

In tutta la procedura, questo è stato per me il passo più rognoso, in quanto, in base alla configurazione del proprio .htaccess, potrebbe essere difficile far visualizzare la directory, perchè questa inizia con un punto (.well-known).

Nel mio .haccess ho sostituito la seguente Rewrite (naturalmente all' interno del mod_rewrite.c)

RewriteRule "(^|/)\." - [F]

con

RewriteRule "(^|/)\.(?!well-known)" - [F]

La procedurà andrà a buon fine se nel client sarà notificato un messaggio di Congratulazioni che indicherà il corretto rilascio dei Certificati SSL, la posizione dove i Certificati SSL sono stati depositati e la procedura per il rinnovo dei Certificati SSL.

Installare su server con cPanel i Certificati SSL ottenuti in locale

Dal terminale di Lubuntu (LXTerminal) eseguire

sudo pcmanfm (viene lanciato in modalità di amministrazione il gestore file PCManFM).

Utilizzare il gestore file navigando dalla root fino a

/etc/letsencrypt/live/example.com

dove troveremo i certificati ottenuti che sono:

cert.pem che è il certificato (CRT)

chain.pem che è il CABUNDLE o CA

fullchain.pem che è l' insieme dei certificati

privkey.pem che è la Private Key.

cPanel Gestione sslAprire il browser e connettersi al proprio cPanel.

Aprire la sezione relativa alla Gestione siti SSL.

Con il gestore file in una finestra e la connessione a cPanel in un' altra finestra, aprire, copiare ed incollare il contenuto dei files .pem nei relativi riquadri predisposti per i certificati nel cPanel e salvare la configurazione. Per me ho dovuto copiare ed incollare cert.pem, chain.pem e privkey.pem.

Effettuare la Redirect di tutte le richieste su https

Pur se è possibile avere un sito web con contenuti misti (http+https), è altamente consigliato servire tutte le pagine con https. Inoltre, se si aveva un sito che per le pagine e tutti i link interni utilizzava indirizzi assoluti, prima di passare ad https, cambiare tutti gli url assoluti in url relativi, al fine di avere un ridotto numero di redirect.

I siti web possono essere in puro php o essere costruiti con un cms, per cui potrebbero esserci diversi modi per effettuare la Redirect di tutte le richieste su https. Ad esempio io che utilizzo Drupal, pur avendo istruzioni diverse dalla mia comunità, ho dovuto utilizzare il codice seguente, che potrebbe funzionare per tutti i siti web, aggiungendolo nel mio .htaccess:

# BEGIN Force SSL
# This should be the first rule beforeother rules
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>
# END Force SSL

Se nella navigazione del sito web si vedono ancora pagine o files serviti con contenuto misto, è possibile aiutarsi con il tool offerto da whynopadlock.

Rinnovo Certificato SSL/TLS di Let's Encrypt

Come precedentemente detto, il Certificato SSL/TLS di Let's Encrypt ottenuto è valido per 90 giorni. Con il rilascio dei certificati, la procedura del Client di Let's Encrypt terminerà con il messaggio di Congratulazioni ed informerà che per il rinnovo sarà sufficiente digitare dal client il comando letsencrypt-auto renew.

Quindi non ci si preoccupa, ma in realtà non sarà così, forse perchè la procedura è ancora in fase di ottimizzazione.

Nei vari tentativi di ottenere il Certficato SSL/TLS tramite client installato su locale, ho anche comunicato l' email del dominio, per cui, 20 giorni prima della scadenza, si riceverà una email da Let's Encrypt che avviserà della scadenza del certificato, email che si ripeterà ogni 10 giorni.

Se non si riuscirà ad ottenere il rinnovo del Certificato SSL/TLS prima della scadenza, alla scadenza del certificato gli utenti che cercheranno di visitare il nostro sito otterranno dal browser un bel messaggio di rischio che scoraggerà gli utenti a visitare il sito, come quelli mostrati di seguito.

Messaggio di connessione non sicura con Firefox

Messaggio di connessione non sicura con Chrome

Il tentativo di ottenere il rinnovo del certificato tramite il comando sopra descritto, non andrà a buon fine.

Ho due idee in merito: il messaggio per il rinnovo automatico è lo stesso che si avrebbe per un client installato direttamente su server, per cui bisognerebbe avere il client su server e configurare un cron per il rinnovo automatico, oppure la procedura di rinnovo deve ancora essere ottimizzata dagli sviluppatori.

Nella ricerca online trovo anche che, certificati ottenuti in modalità manuale, devono essere rinnovati con lo stesso identico comando utilizzato per ottenerli; questo però produrrà un errore 503, forse perchè la procedura iniziale si aspetta un sito che risponde sulla porta 80 anzichè la porta 443.

In ogni caso non bisogna spaventarsi degli errori, è possibile fare ogni genere di tentativo, purchè non vengano mai eliminati files dal client di Let's Encrypt, neanche i tanti log che riportano gli errori ottenuti.

L' errore 503 mi porta a disattivare la configurazione https per tornare ad http; per questo è necessario disattivare le redirect da .htaccess e modificare il file robots.txt mettendo un disallow per tutti i motori di ricerca al fine di non creare problemi di indicizzazione nei motori di ricerca, perchè è necessario fare il tutto con il sito online.

Fatto questo, alla richiesta del nuovo certificato con il metodo certonly, parte prima l' aggiornamento del client e poi saranno rilasciati i nuovi certificati, ma questa volta non ci sarà alcuna sfida acme da superare.

Come per la richiesta dei certificati SSL/TLS, questa volta, da cPanel si elimineranno prima i vecchi certificati e quindi si incolleranno nuovamente i nuovi certificati SSL/TLS; si rimetteranno quindi le redirect per switchare nuovamente su https (porta 443) e si ripristinerà il robots.txt originale.

La prossima volta tenterò ancora il letsencrypt-auto renew per verificare se era un problema di aggiornamento del client di Let's Encrypt.

Ultimo consiglio: dopo il primo rilascio del certificato SSL/TLS non eliminare la directory .well-known anche se si è tentati di farlo perchè si vedono tentativi di accesso alla directory dai motori di ricerca che vanno alla ricerca di files per iOS che utilizzano la stessa directory; al limite disattivare l' accesso alla directory da .htaccess e riattivarla prima del rinnovo del Certificato SSL/TLS.

CONCLUSIONI

Come si vede, avere un sito web non è come avere una pagina Facebook e questo non può essere lasciato alla improvvisazione dei tanti che si professano webmaster solo perchè riescono a mettere su una decina di pagine belle da vedere.

Avere un sito web che dia soddisfazione ai proprietari ed agli utenti che ne usufruiscono (che possono essere veramente tanti al contrario di una pagina Facebook) significa avere tempo per curarlo, gestirlo e rinnovarlo continuamente.

Risorse:

https://letsencrypt.org/docs/
https://community.letsencrypt.org/t/tutorial-for-os-x-local-certificates-and-shared-hosting/6859
https://www.kosinix.com/install-lets-encrypt-certificate-on-shared-hosting/
https://neurobin.org/docs/web/how-to-install-letsencrypt-ssl-certificate-in-a-shared-hosting/
https://wiki.apache.org/httpd/RewriteHTTPToHTTPS
https://www.drupal.org/https-information

Agli appassionati di SEO consiglio un post su Google+ di John Mueller con i relativi commenti.