HTTPS ready per il 2017 con Let’s Encrypt
Come molti sapranno, Google ha dichiarato che dal gennaio 2017, con la versione 56 di Google Chrome, i siti web in HTTP verranno dichiarati non sicuri (not secure).
In pratica, chi visiterà un sito HTTP con Chrome 56 vedrà un messaggio simile al seguente:
e nei mesi successivi il messaggio diventerà ancora più evidente:
L’obiettivo è rendere più sicuro il passaggio di informazioni tra l’utente e il sito, infatti, mentre nella navigazione via HTTP i dati sono in chiaro, nella navigazione con protocollo HTTPS i dati vengono criptati tramite il certificato SSL (Secure Sockets Layer).
Ovviamente i vostri siti continueranno a funzionare normalmente anche se restano in HTTP ma l’immagine che date ai vostri visitatori potrebbe risentirne, inoltre è possibile che venga penalizzato anche il posizionamento nel motore di ricerca di Google e questo è decisamente molto importante (anche se su questo non c’è niente di certo).
Per mettere in HTTPS il proprio sito web serve un certificato SSL riconosciuto pubblicamente e rilasciato da appositi enti certificatori (Certificate Autority CA). Ne esistono molti quasi tutti a pagamento ma da circa un anno ce n’è uno gratuito e molto valido: Let’s Encrypt.
Let’s Encrypt è un Certificate Autority (CA) che rilascia certificati pubblici gratuiti e rinnovabili automaticamente. E’ nata con lo scopo di riuscire a cifrare tutte le comunicazioni sul web e si prefigge di raggiungere questo scopo azzerando il costo dei certificati ed andando ad automatizzare il processo di configurazione del web server. E’ sostenuta dall’Internet Security Research Group (ISRG), un’organizzazione senza scopo di lucro con il focus principale sulla sicurezza su internet che viene sponsorizzata da grandi aziende o fondazioni come Mozilla Foundation, Akamai, Cisco, Chrome ed OVH.
Configurazione web server Apache per certificato SSL di Let’s Encrypt
Vediamo ora come procedere per configurare il proprio web server Apache affinchè ottenga e mantenga aggiornato il certificato SSL con Let’s Encrypt.
Le istruzioni sotto indicate si riferiscono ad un server Linux e per la precisione ad un server Ubuntu Linux con web server Apache (IMPORTANTE: se il vostro web server è Nginx le istruzioni sono diverse)
Eseguire i seguenti comandi per richiedere il certificato SSL e configurare il proprio web server:
cd /usr/local/sbin/
wget https://dl.eff.org/certbot-auto
cd ~
chmod a+x /usr/local/sbin/certbot-auto
certbot-auto --apache -d dominio_1 -d dominio_2
al posto di dominio_1 e dominio_2 bisogna indicare i propri domini e conviene indicarli con e senza www, come ad esempio:
certbot-auto --apache -d sefi.it -d www.sefi.it
Durante il processo vengono eseguiti i seguenti passi:
viene richiesto l’indirizzo e-mail da associare al certificato:
richiesta di accettazione dei termini del servizio:
ad un certo punto viene chiesto se permettere comunque anche l’accesso HTTP o se indirizzare tutto il traffico verso HTTPS. Personalmente preferisco la seconda opzione ma ognuno è libero di decidere come preferisce:
Al termine viene mostrato un indirizzo dove testare la propria configurazione
e un invito a fare backup dei propri certificati nonchè donazioni per sostenere il progetto
I certificati ottenuti vengono salvati nel seguente percorso:
/etc/letsencrypt/live/
certbot-auto modifica automaticamente anche i file di configurazione dei virtual host aggiungendo righe simili alle seguenti:
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.sefi.it [OR]
RewriteCond %{SERVER_NAME} =sefi.it
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
Rinnovo del certificato
Il cerificato ha valità 90 giorni ma può essere rinnovato entro 30 giorni dalla scadenza con il seguente comando:
certbot-auto renew
digitando il seguente comando, se il certificato è valido per un numero di giorni superiore a 30, viene mostrato il seguente messaggio indicante che non è ancora il momento per il rinnovo:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/sefi.it.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/sefi.it/fullchain.pem (skipped)
No renewals were attempted.
Per automatizzare il rinnovo del certificato SSL conviene schedulare il comando precedente in crontab:
crontab -e
Per eseguire la richiesta di rinnovo ogni Domenica alle 2:30 inserire la seguente riga:
30 2 * * 0 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
Il tutto è decisamente semplice, non vi pare?
Non resta che ringraziare Let’s Encrypt per il loro prezioso servizio.