1. HTTPS, introduzione al protocollo sicuro

Da diversi anni a questa parte, soprattutto per via dell’affermazione dell’e-commerce e delle transazioni di denaro basate su internet, abbiamo assistito ad un crescente affermarsi del protocollo HTTPS. L’acronimo aggiunge una “S” che sta per “Secure” al più tradizionale protocollo HTTP: di fatto, HTTPS si propone proprio come versione sicura di HTTP, che è alla base di tutto il web così come lo conosciamo oggi.

Sebbene la sicurezza rappresenti il motivo principale per il quale tutti i principali siti web odierni stano virando verso HTTPS, ci sono anche altre ragioni per cui è bene migrare da HTTP ad HTTPS. Una su tutte riguarda l’ottimizzazione del posizionamento nei motori di ricerca (ovvero il cosiddetto ambito SEO): già da qualche anno, infatti, Google pone in una posizione privilegiata tutti i siti web che funzionano su HTTPS, conferendo di fatto a quest’ultimo protocollo anche l’abilità di accrescere la visibilità di un sito web.

A ciò si aggiunge un ulteriore fattore: la user experience. Molti utenti sono ormai a conoscenza dell’importanza di una connessione HTTPS, soprattutto quando effettuano transazioni di denaro o accedono ad aree private e/o a dati sensibili. La maggior parte dei browser moderni mostra icone o avvisi che specificano se una connessione è affidabile o meno, che sostanzialmente traducono in un linguaggio più user-friendly l’informazione sull’utilizzo o meno del procollo HTTPS.

Dal momento che sicurezza, visibilità ed user experience sono tra i principali aspetti che aumentano la qualità di un sito web, in questa guida cercheremo di riassumere le principali fasi del processo di migrazione di un sito web da HTTP ad HTTPS. Partiremo da qualche cenno introduttivo (che sarà utile più avanti), per poi capire cosa sono e come si ottengono i certificati SSL, come installarli sul nostro web server e quali altre operazioni sono necessarie per un corretto funzionamento del nostro sito web su HTTPS. Approfondiremo poi brevemente sia l’ambito SEO, sia quello dei CMS, riassumendo quali strumenti ci vengono offerti per effettuare (in modo semplice) un migrazione ad HTTPS di un’istanza di WordPress.

La Sicurezza di HTTPS

http-httpsLa sicurezza introdotta con HTTPS si basa su funzionalità principali, che descriviamo brevemente di seguito:

  • cifratura dei dati: tutti i dati che transitano vengono cifrati;
  • integrità dei dati: tutti i dati in transitano non possono essere corrotti (o, se lo sono, ciò può essere verificato facilmente);
  • autenticazione: garantisce ad entrambe le parti in comunicazione che i dati sono stati inviati da una parte fidata nota, evitando attacchi man-in-the-middle.

Per potere implementare queste funzionalità, HTTPS (che è un protocollo di livello applicativo) non fa altro che sfruttare le funzionalità di un altro protocollo, di livello trasporto, che è in genere uno tra SSL (Secure Socket Layer) o TLS (Transport Layer Security, evoluzione di SSL). A onor del vero, HTTPS non è altro che il protocollo HTTP eseguito sopra uno dei protocolli sopra citati, che offrone le funzionalità di sicurezza descritte in precedenza.

Figura 1. Differenza tra HTTP ed HTTPS (click per ingrandire)

Differenza tra HTTP ed HTTPS

Dal momento che questi protocolli di trasporto sicuri necessitano di un certificato SSL, nella guida vedremo come ottenerne uno e come utilizzarlo.


2. Certificati SSL: come ottenerli

Dopo avere introdotto il protocollo HTTPS, in questa lezione vedremo una delle fasi cruciali per la migrazione da HTTP ad HTTPS: l’ottenimento di un certificato SSL.

I certificati SSL sono file abbastanza leggeri, che includono una chiave di cifratura associata ai dettagli di una specifica autorità di certificazione (o Certification Authority, CA). Assumendo che tale autorità di certificazione sia affidabile, e senza addentrarci nella teoria, possiamo dire che tale certificato ci garantisce la sicurezza nelle comunicazioni cifrate per mezzo di tale chiave. Installare un certificato SSL su un web server ci permette di attivare il protocollo HTTPS, con tutto ciò che ne consegue dal punto di vista della sicurezza.

Esistono diverse opzioni per ottenere un certificato SSL, sia gratuite che a pagamento. Su GoGetSSL o SSLs.com, per esempio, è possibile acquistare un certificato a basso costo, per una cifra che oscilla tra i 4 e i 10 dollari statunitensi. In alternativa, su HTML.it abbiamo già parlato di Let’s Encrypt, un servizio che permette di ottenere certificati SSL gratuiti, a patto che vengano rinnovati annualmente.

Tipologie di Certificati SSL

Al di là di quanto siamo disposti a spendere per un certificato, è lecito chiedersi perchè alcuni servizi offrano certificati gratuiti, mentre altri richiedano cifre non sempre indifferenti. In generale, infatti, possiamo distinguere i certificati SSL in tre principali tipologie:

  • Domain Validation: può essere applicato ad un singolo dominio o a domini di secondo livello. In genere, questo genere di certificati si possono ottenere nel giro di pochi minuti e a prezzi molto contenuti, con una semplice verifica tramite mail (senza documenti cartacei o altra burocrazia);
  • Business/Organization Validation: anche questo tipo di certificato può essere applicato ad un singolo dominio o a domini di secondo livello, ma richiede una verifica atta ad accertare l’identità della società richiedente il certificato. In genere, questo tipo di certificato richiede tra le 24 e le 72 ore per essere emesso, ma offre un maggior livello di sicurezza e affidabilità;
  • Extended Validation: come il precedente, ma richiede procedure meno rapide e burocraticamente più “faticose”, offrendo però un maggiore livello di sicurezza. I costi sono in genere più elevati, e l’emissione del certificato richiede tra i 2 ed i 7 giorni.

Per comprendere meglio la differenza tra la Business/Organization Validation e la Extende Barra degli indirizzi di Google su Firefox d Validation, è utile dare uno sguardo alla barra degli indirizzi di un browser moderno come Mozilla Firefox o Google Chrome. Osserviamo la differenza tra le barre degli indirizzi delle home page di Google e PayPal:

Figura 1. Barra degli indirizzi di Google su Firefox (click per ingrandire)

 

 

 

 

Figura 2. Barra degli indirizzi di PayPal su Firefox (click per ingrandire)

Barra degli indirizzi di PayPal su Firefox

Come si vede, in entrambi i casi Firefox ci mostra un indicatore visivo di affidabilità del sito web: nel caso di Google, l’indicatore consiste in un semplice lucchetto (a significare l’utilizzo di un certificato SSL di tipo Business/Organization Validation); nel caso di PayPal, invece, il lucchetto è accompagnato anche dal nome della società “proprietaria” del certificato (a significare l’utilizzo di un certificato SSL di tipo Extended Validation). Queste differenze, che possono sembrare banali, sono invece molto importanti dal punto di vista dell’utente: un sito di e-commerce sarà certamente reputato più affidabile se si affida ad un certificato SSL di tipo Extended Validation (che ha quindi un costo maggiore); in altri casi, dove ad esempio non si prevedono transazioni di denaro o scambi di informazioni sensibili, può essere sufficiente anche un certificato più semplice ed economico.

 

3. Installare un certificato SSL su Apache

Nella lezione precedente, abbiamo visto come ottenere un certificato SSL da una certification authority. In questa lezione vedremo come installare tale certificato, assumendo di lavorare su Apache.

Nell’approfondimento dedicato a Let’s Encrypt, avevamo spiegato in che modo ottenere ed installare automaticamente un certificato SSL su Apache. In questo caso, infatti, è sufficiente un singolo comando:

./letsencrypt-auto --apache

Se abbiamo scelto, per qualche motivo, di non utilizzare Let’s Encrypt, dovremo però procedere diversamente. La procedura non è complicata, ma non certo immediata come nel caso appena descritto.

La prima cosa da fare è scaricare il certificato appena ricevuto dalla Certification Authority, che generalmente ci viene inviato via mail sotto forma di archivio .zip. Generalmente, tale archivio contiene due file: il certificato SSL ed un certificato di intermediazione. Se così non è, questo link fornirà ulteriori informazioni per l’ottenimento di entrambi questi file.

L’installazione dei certificati necessita, innanzitutto, del caricamento di questi due file in una cartella del nostro server, solitamente /etc/apache/ssl/ nel caso di Apache, oppure /etc/apache2/ssl nel caso di Apache2. Fatto ciò, verifichiamo che Apache abbia effettivamente installato il modulo SSL. Per farlo, eseguiamo il comando seguente:

a2enmod ssl

Riavviamo quindi Apache come segue (assumendo di lavorare su Ubuntu):

sudo service apache2 restart

A questo punto, apriamo il file httpd.conf di Apache (di cui abbiamo parlato appronditamente nella guida ad Apache), e cerchiamo la sezione dedicata ai Virtual Host. Aggiungiamo quindi quanto segue:

<VirtualHost *:443>
DocumentRoot /var/www/
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificato.crt
SSLCertificateKeyFile /etc/apache2/ssl/chiave_privata.key
SSLCertificateChainFile /etc/apache2/ssl/DigiCertCA.crt
</VirtualHost>

Il primo parametro serve a mettere in ascolto Apache sulla porta 443 (ovvero quella di default per HTTPS), mentre SSLEngine on abilita le funzionalità di SSL. SSLCertificateFile indica il path del file del certificato SSL che abbiamo ricevuto dalla CA, mentre SSLCertificateChainFile indica il path del certificato di intermediazione. Infine, SSLCertificateKeyFile indica il file contenente la nostra chiave privata, che può essere generata a partire dal file .crt come descritto a questo link.

Salviamo quindi il file httpd.conf e riavviamo nuovamente Apache.

Redirect di HTTP su HTTPS

In molti casi, per garantire la retrocompatibilità del nostro sito HTTPS con chi tenta di raggiungerlo in HTTP, possiamo aggiungere una ulteriore entry ai Virtual Host che effettua un redirect automatico; ecco come:

<VirtualHost *:80>
    ServerName  miosito.com/
    Redirect / https://miosito.com/
</VirtualHost>

 

4. Installare un certificato SSL su nginx

 ----------------------------------------------------------

http://blog.flamenetworks.com/http-https-senza-perdere-posizionamento/

Esistono diversi tipi di certificati SSL: DV, OV, EV, Wildcard e EV Multi-Domain.

  • DV SSL: sta per Domain Validation. Fa sì che negli e-commerce compiano transazioni sicure, proteggendo i dati di scambio. È specifico per siti web
  • OV SSL: la sigla OV sta per Organization Validation. Si tratta di un certificato studiato per proteggere da attacchi di phishing su tutti i browser comunemente utilizzati
  • EV SSL: La sigla EV sta per Extended Validation. Questo tipo di certificato ha un costo generalmente più elevato e fornisce alta protezione anche contro il phishing. È il certificato che offre la protezione più alta, grazie al processo di validazione/emissione del certificato, che richiede la presentazione di documenti specifici (visura camerale, atto notarile, dichiarazione giurata, etc…). Mostra, inoltre, ai visitatori la barra verde di sicurezza con il nome dell’azienda sul browser
  • Wildcard: è l’ideale quando ti serve il certificato sia sul dominio principale che su tutti i sottodomini
  • EV Multi Domain: stessi concetti del certificato EV, ma con la possibilità di validare anche uno o più domini/sottodomini