Se possiedi un sito web avrai sicuramente idea di cosa sia HTTP. Molto semplicemente HTTP, acronimo di HyperText Transfer Protocol , è un protocollo di rete, un insieme di regole utilizzate per trasferire pagine ipertestuali sul web.

Tipicamente ogni sito web ha un proprio server HTTP che mediante il protocollo TCP/IP risponde ad ogni chiamata effettuata da un software client chiamato browser su un socket (la porta 80). La risposta corrisponderà al contenuto della pagina richiesta e al caricamento di tutte le risorse di cui è composta (immagini, fogli di stile, file javascript ecc.).

Concepito agli albori del web esso è un protocollo stateless che non conserva in memoria le connessioni effettuate e permette il passaggio da un server all’altro attraverso i collegamenti ipertestuali presenti nelle pagine.

HyperText Transfer Protocol over Secure Socket Layer o HTTPS lo possiamo considerare come un’evoluzione di HTTP: mediante il livello SSL (Secure Sockets Layer) in aggiunta al già citato TCP/IP ogni dato che entra ed esce dal server viene cifrato rendendo la sua lettura da parte di terzi impossibile.
Un server HTTPS solitamente viene attivato sulla porta 443.

Vantaggi e svantaggi di HTTPS

Come potrai immaginare i vantaggi nell’adottare HTTPS sono enormi in termine di sicurezza, poiché si impedisce che i dati che passano all’interno del nostro sito web possano essere sniffati ovvero intercettati da qualcun altro.

Uno degli attacchi più pericolosi è il cosiddetto man in the middleMITM. Su un protocollo HTTP in cui avviene un tipico scambio client-server, come quello spiegato precedentemente, una figura nel mezzo potrebbe senza che noi ce ne accorgiamo intercettare le trasmissioni scambiate e alterarne i messaggi, provocando danni enormi. Spesso questa tecnica è utilizzata per alterare i DNS in quanto essi non hanno alcun meccanismo di autenticazione.

Certo se vogliamo trovare uno svantaggio in HTTPS possiamo imputarlo alla potenza computazionale richiesta per cifrare e decifrare i dati.
Tale processo in un sito web si dovrebbe concretizzare in tempi di caricamento più lunghi, ma è dimostrato che la dilatazione di questi tempi sia praticamente impercettibile.

Nei siti web istituzionali, portali di home banking ed e-commerce il protocollo HTTPS è stato già adottato da tempo essendo un passaggio necessario per preservare i dati sensibili dei clienti.

Chrome nel 2017 ha deciso di penalizzare i siti web che non hanno HTTPS

Nel 2017 Google ha aggiornato il suo browser Chrome e con la sua build 56 ha introdotto una novità che potrebbe non piacere a chi gestisce siti web.

Infatti qualora un sito web raccolga informazioni sensibili da parte dei suoi utenti e non abbia adottato il protocollo sicuro HTTPS, il browser indicherà che il sito in questione non è sicuro.

Questo è un passo certamente indispensabile al fine di aumentare la sicurezza degli utenti ma che potrà portare a tassi di abbandono altissimi nei siti web che ancora non hanno effettuato la migrazione.

Sembra che questo sia solamente il primo tassello di una lunga campagna condotta da Google che potrebbe portarlo ad attuare dei cambiamenti anche al proprio algoritmo di posizionamento agevolando a livello di ranking siti web in HTTPS rispetto a quelli in HTTP per i quali, ad oggi, ha mantenuto una posizione neutrale.

E’ l’ora quindi di passare ad HTTPS, come puoi organizzarti?

Tante possibilità… e qualcuna è pure gratuita!

Per rendere sicuro il tuo sito web dovrai installare sul tuo server un certificato che può essere:

  • Self-signed ovvero firmato digitalmente dallo stesso ente che lo emette
  • Firmato da un’autorità competente che ne attesta la sua effettiva sicurezza

Entrambe le soluzioni, se correttamente configurate, cifrano i dati raggiungendo lo scopo prefissato. Va anche detto che i browser tendono a scoraggiare gli utenti che accedono a siti web con certificati self-signed: in fondo chi dimostra che il sito è veramente sicuro?

Ormai ogni società di web hosting offre il supporto ad HTTPS, spesso con un sovrapprezzo. Vediamo invece due servizi che offrono la possibilità di utilizzare certificati attendibili in modo gratuito.

Let’s Encrypt

Il primo servizio si chiama LetsEncrypt e dal 2014 permette di automatizzare in modo del tutto gratuito il rilascio e il rinnovo di certificati per il protocollo TLS attraverso l’installazione di un client sul proprio server.

Di seguito riporto degli esempi per quanto riguarda installazione del client, generazione dei certificati e rinnovo su Linux con distribuzione Debian e webserver Apache. Per casi specifici e diversi dall’esempio ti consiglio di dare uno sguardo alla relativa documentazione.

Installazione

Per installare il client dobbiamo avere un accesso diretto alla shell interattiva: ciò è reso possibile solo se abbiamo a disposizione un server cloud o una VPS, ma non attuabile nel caso di server condivisi o hosting.

Possiamo installare a partire dai repository ufficiali o dai sorgenti del progetto il client che si chiama certbot (precedentemente letsencrypt-auto).

apt-get install python-certbot-apache

Generazione dei certificati

Per generare i certificati potremo utilizzare il comando:

certbot certonly -d miodominio.com

Indicando successivamente la DocumentRoot (cartella pubblica) sul server dove risiede il dominio e i nomi di dominio interessati verranno generati 4 file nella cartella /etc/letsencrypt/live/miodominio.com:

  • privkey.pem (la chiave privata)
  • cert.pem (il SSLCertificateFile)
  • chain.pem (il SSLCertificateChainFile)
  • fullchain.pem (concatenazione di cert.pem e chain.pem)

Configurazione del VirtualHost su Apache

Adesso dovremo indicare sul nostro VirtualHost i file ottenuti. Ecco un esempio:

<VirtualHost *:443>	
ServerName  miodominio.com
	...
	
	SSLEngine on 
	SSLCertificateFile /etc/letsencrypt/live/miodominio.com/cert.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/miodominio.com/privkey.pem
	SSLCertificateChainFile /etc/letsencrypt/live/miodominio.com/chain.pem
</VirtualHost>

Una volta configurato il VirtualHost potremo riavviare Apache usando il comando:

service apache2 restart

Rinnovo dei certificati

I certificati di LetsEncrypt hanno una scadenza, ogni due mesi dobbiamo ricordarci di rinnovarli.
Per rinnovare i certificati possiamo utilizzare il comando:

certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 start"

Con questo comando, eseguiamo le seguenti operazioni:

  • Fermiamo l’esecuzione del webserver Apache
  • Rinnoviamo i certificati
  • Avviamo il webserver Apache

Molto utile può essere creare un’ operazione schedulata (cron) contenente questo comando e che viene eseguito ad intervalli regolari che decidiamo noi, con lo scopo di automatizzare il rinnovo.

CloudFlare

Abbiamo già dibattuto riguardo CloudFlare esaltandone principalmente la sua utilità come reverse-proxy ma non dimentichiamoci che questo permette di fornirci 3 diverse modalità per implementare HTTPS sul nostro sito utilizzando il piano gratuito:

  • Flexible SSL, questa modalità è molto utile nel caso il nostro webserver non possa accettare connessioni HTTPS.
    Non abbiamo bisogno di nessun certificato installato sul nostro server. CloudFlare ci garantisce una connessione protetta quando avviene la connessione tra l’utente e CloudFlare, mentre non garantisce protezione nella seconda parte in cui CloudFlare stabilisce una connessione diretta con il nostro Server.
    E’ piuttosto sconsigliata e da considerare come “ultima spiaggia” qualora non sia possibile abilitare SSL sul nostro server o hosting.
  • Full SSL, questa modalità garantisce una connessione protetta sia nella tratta di connessione tra l’utente e CloudFlare, sia nella seconda parte quando CloudFlare comunica direttamente col webserver, il quale accetta connessioni HTTPS ma con un certificato self-signed. E’ consigliata quando vogliamo evitare che venga restituito l’errore di autenticità del nostro certificato ed è probabilmente la modalità migliore da utilizzare quando non vogliamo acquistare un certificato SSL da un’autorità di terze parti.
  • Full SSL (strict), questa modalità garantisce una connessione protetta sia nella tratta di connessione tra l’utente e CloudFlare, sia nella seconda parte quando CloudFlare comunica direttamente col webserver, il quale accetta connessioni HTTPS ma con un certificato valido. Che esso sia generato tramite LetsEncrypt o presso altre autorità poco importa, questa modalità è perfetta nel caso in cui ci interessa utilizzare CloudFlare principalmente come reverse-proxy avendo già a disposizione un certificato SSL valido.
    Ovviamente dobbiamo ricordarci di rinnovare il certificato presso l’autorità scelta per la certificazione.

Abilitazione di CloudFlare

Abilitare CloudFlare risulta parecchio semplice anche su un Hosting, a patto che questo abbia una gestione DNS. In questo caso dopo aver creato un account gratuito, dovremo far puntare i NameServer del nostro sito web su i namesevers forniti da CloudFlare.

Accedendo a CloudFlare avremo quindi la possibilità di fare gestione DNS, della Cache e dei certificati SSL accedendo alla sezione Crypto, selezionando una delle modalità precedentemente spiegate.

In conclusione

Abbiamo visto cosa è HTTPS e quali sono i suoi vantaggi e abbiamo considerato due soluzioni totalmente gratuite per integrarlo all’interno del nostro sito web in maniera totalmente gratuita.

Ora la decisione spetta a te e non ti consiglio di aspettare troppo tempo se non vuoi rischiare di veder sparire il tuo sito web dalla SERP di Google.

Noi di dueclic da tempo privilegiamo l’uso di connessioni HTTPS nei nostri progetti, hai bisogno di assistenza? Non esitare a contattarci.

Andrea Debernardi

Andrea Debernardi

Cofondatore di dueclic, sviluppatore e appassionato di tecnologia. Pur essendo fortemente orientato al web la mia curiosità continua e attrazione riguardo le novità non mi precludono nulla nella programmazione. Non mi piace avere limiti perciò tendo a colmarli continuamente.