This page looks best with JavaScript enabled

#2 Cos'è HTTPS e perché è importante?

 ·  ☕ 6 min read

L’HyperText Transfer Protocol over Secure Socket Layer (HTTPS), (anche noto come HTTP over TLS, HTTP over SSL e HTTP Secure) è un protocollo per la comunicazione sicura attraverso una rete di computer utilizzato su Internet (Wikipedia).

Ma perché è così importante?

Iniziamo a dire che quando utilizziamo HTTP e HTTPS stiamo comunque utilizzando HyperText Transfer Protocol e in riferimento ad R di solito stiamo accedendo ad interfacce web (RStudio server, Shiny Dashboard o HTML generati con RMarkdown, ecc…) oppure stiamo utilizzando delle API Web (httpr, client o Plumber, server). Per semplicità possiamo immaginare che stiamo parlando di un’applicazione Shiny.

L’HTTPS protegge tutta la comunicazione con il server: l’immissione di password, i dati che vengono caricati, le operazioni che vengono effettuate, ma anche al contrario i dati che si visualizzano e le risposte del server. Tutta la comunicazione è invece esposta quando si usa la versione HTTP.

Per fare chiarezza delineiamo i seguenti concetti:

  1. l’autenticazione dell’utente
  2. la riservatezza delle informazioni scambiate
  3. l’autenticazione del server

L’autenticazione dell’utente si ottiene di solito tramite la richiesta di un nome utente e relativa password. Serve a riconoscere l’utente, a garantire l’accesso agli utenti autorizzati e a proibirlo a tutti gli altri. Tuttavia è bene sapere che, quando un utente autorizzato e accede al sistema, tutte le comunicazioni tra client (il browser dell’utente) e server passano attraverso la rete e sono esposte ad occhi indiscreti. Quindi dati, ma anche passwords possono essere intercettati e rubati con una certa facilità. Al contrario, la riservatezza delle informazioni scambiate si ottiente solitamente tramite la cifratura del traffico tra client e server, in questo modo anche le informazioni intercettate risultano illeggibili e non modificabili senza allarmare il sistema di comunicazione. L’autenticazione del server è il meccanismo con cui il client (il browser) ha la conferma che il server che risponde alla sua richiesta di connessione, sia autentico. Questo procedimento è necessario per evitare attacchi informatici in cui un server terzo si sostituisce a quello competente e, presentandosi esattamente come l’originale, si fa consegnare informazioni riservate come utente e password. Questo genere di attacco non è così difficile da architettare se consideriamo che il server malevolo potrebbe mettersi a cavallo della comunicazione sostituirsi all’end point, ma poi farci comunicare realmente con il server competente (per saperne di più guardate l’attacco man-in-the-middle).

GDPR, NDA

Quando i dati sono sensibili, esistono diversi motivi legali per proteggerli. Il GDPR, il Regolamento UE sulla protezione dei dati richiede la ”…capacità di assicurare su base permanente la riservatezza, l’integrità, la disponibilità e la resilienza dei sistemi e dei servizi di trattamento” (GDPR compliance (IT)). Mentre i rapporti professionali sono spesso normati da accordi di non divulgazione (in inglese non-disclosure agreement, NDA). La protezione dei dati spesso e volentieri rientra in questi accordi.

Come funziona?

HTTPS permette di attivare una comunicazione HTTP sicura, perché cifrata tramite i certificati SSL (Secure Socket Layer) dalla sorgente alla destinazione (end-to-end). Inoltre sempre grazie all’uso del protocollo SSL il nostro client (Browser) è in grado di assicurarsi l’autenticità del server a cui ci si connette, ovvero il server è veramente chi dichiara di essere.

In termini tecnici utilizzare la tecnologia HTTPS porta diversi vantaggi in Sicurezza in termini di:

  1. Crittografia: le informazioni confidenziali sono protette dalle intercettazioni perché la cifratura le rende illeggibili. Significa che tutte le informazioni scambiate con il server rimangono private.

  2. Integrità: i dati così cifrati non possono essere manipolati o alterati ad opera di qualche malintenzionato.

  3. Autenticità: il server a cui ci stiamo connettendo è corretto. Password e dati che invieremo saranno utilizzate dal destinatario corretto. Nota importante: per autenticare propriamente il server è necessario un certificato SSL firmato da un’autorità di certificazione CA (Certification Authority), altrimenti il browser avviserà che il certificato del sito web non può essere verificato. La verifica che viene fatta è quindi che certificato che comunica il server sia intestato al nome di dominio a cui ci si connette, ad esempio rinproduction.com. Se il risultato è positivo si è connessi al server giusto.

HTTPS è il futuro del web

Oggigiorno i moderni browser mettono in allarme l’utente quando il contenuto del sito che sta visitando non è pienamente protetto da HTTPS. Non serve dire che se il servizio che offriamo vuole essere affidabile deve supportare questo genere di tutele per essere ben accettato dai browsers. Si capisce quindi come HTTPS sta diventando lo standard minimo da utilizzare. Infatti Google da tempo (6 agosto 2014) ha annunciato che i siti ospitati sotto protocollo HTTPS sono ritenuti maggiormente affidabili e così il protocollo diventa di fatto anche un fattore di ranking del motore di ricerca.

Se solo usate HTTPS senza un certificato valido, il vostro utente riceverà questo allarmante messaggio accedendo alla vostra applicazione.

Invalid certificate

Mentre se tutto è corretto, riuscirà a vedere il “lucchetto verde”: la connessione è sicura ed è con il server registrato a vostro nome.

Valid certificate

Problematiche Software Open Source

Purtroppo una delle funzionalità di cui mancano le versioni Open Source dei software più usati nell’ambiente R è proprio di HTTPS. Shiny Server e RStudio Server forniscono il supporto di connessione HTTPS solo nelle versioni Professional a pagamento. Se il budget a disposizione non permette acquistare queste licenze è necessario utilizzare altri strumenti come Shiny Proxy il quale fornisce uno Shiny Server Open Source con Supporto per Autenticazione e HTTPS oppure bisogna sfruttare altri server web in grado di interporsi tra client e Shiny e agire da server HTTPS per la connessione HTTP fornita dai software Open Source. Da notare che non ci siano conflitti tra Open Source e HTTPS, infatti esistono numerosi software Open Source con questa feature, ma sono gli strumenti forniti al mondo R che rilasciano questa funzionalità solo a pagamento.

Ottenere un server HTTPS a partire da una connessione HTTP è possibile con tecnologie Open Source (se siete interessati questo potrebbe essere argomento di uno dei prossimi articoli).

Alternative a HTTPS

L’unica alternativa all’uso di questo protocollo sicuro e all’utilizzo di una rete privata e possibilmente isolata dall’esterno, è l’utilizzo di HTTP su rete sicura. Si tratta di soluzioni che di fatto sostituiscono lo strato di autenticazione (del server) e di cifratura SSL con un’altra soluzione tra:

  • tunnel cifrato SSH (Secure SHell)
  • VPN (Virtual Private Network)
  • Altri sistemi di tunnelling cifrati per TCP/IP o HTTP

Differenze tecniche con HTTP

Al di là delle differenze funzionali appena descritte, ci sono altre differenze prettamente tecniche.

La porta standard utilizzata da HTTP è la 80, mentre HTTPS utilizza la 443. Nota: la porta di cui stiamo parlando è la porta del protocollo TCP/IP, su cui si basano HTTP e HTTPS, ed è l’identificativo del canale su cui un applicativo server è in ascolto. Di conseguenza quando vi connettete a http://rinproduction.com state contattando il server rinproduction.com sulla porta 80, mentre se https://rinproduction.com vi state connettendo al medesimo server sulla porta 443. Significa che se volete forzare l’utente che cerca HTTP ad usare il protocollo sicuro dovete tenere il server in ascolto sulla 80 e fare un redirect. Per approfondimenti trovate molta documentazione on-line.

HTTPS è veloce. Benché richieda un processo più complesso di HTTP ha dei meccanismi che lo rendono spesso più veloce. Trovate un esempio qui: http://www.httpvshttps.com/

Conclusione

Gli utenti si aspettano che, quando accedono ad un servizio on-line, ciò che fanno rimanga confidenziale, quindi è importante che la tecnologia risponda a questa aspettativa. HTTPS effettua questa protezione lasciando la compatibilità con tutto quello che funziona su HTTP.

Commenti

Commenta su Linkedin

Commenta su Twitter

Credits

Share on