Le richieste e le risposte HTTP vengono inviate in chiaro, il che significa che chiunque può leggerle. HTTPS risolve questo problema utilizzando la crittografia TLS/ SSL.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
HTTPS è HTTP con crittografia e verifica. L'unica differenza tra i due protocolli è che HTTPS utilizza TLS (SSL) per crittografare le normali richieste e risposte HTTP e per firmare digitalmente tali richieste e risposte. Di conseguenza, HTTPS è molto più sicuro di HTTP. Un sito Web che utilizza HTTP ha http:// nel suo URL, mentre un sito Web che utilizza HTTPS ha https://.
HTTP sta per Hypertext Transfer Protocol ed è un protocollo, o un ordine e una sintassi prescritti per la presentazione delle informazioni, utilizzato per trasferire i dati su una rete. La maggior parte delle informazioni inviate su Internet, inclusi i contenuti dei siti Web e le chiamate API, utilizza il protocollo HTTP . Esistono due tipi principali di messaggi HTTP: richieste e risposte.
Nel modello OSI (vedi Cos'è il modello OSI?), HTTP è un protocollo di livello 7 .
Le richieste HTTP vengono generate dal browser di un utente mentre l'utente interagisce con le proprietà Web. Ad esempio, se un utente fa clic su un collegamento ipertestuale, il browser invierà una serie di richieste "HTTP GET" per il contenuto che appare su quella pagina. Se qualcuno cerca "Cos'è HTTP?" e questo articolo viene mostrato nei risultati di ricerca, quando fa clic sul collegamento, il browser creerà e invierà una serie di richieste HTTP per ottenere le informazioni necessarie per il rendering della pagina.
Queste richieste HTTP vengono tutte trasferite a un server di origine o a un server di caching proxy e tale server genererà una risposta HTTP. Le risposte HTTP sono risposte alle richieste HTTP.
Una richiesta HTTP è solo una serie di righe di testo che seguono il protocollo HTTP. Una richiesta GET potrebbe essere simile a quella riportata di seguito:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
Questa sezione di testo, generata dal browser dell'utente, viene inviata tramite Internet. Il problema è che viene inviata proprio in questo modo, in chiaro, quindi chiunque monitori la connessione può leggerla. (Chi non ha familiarità con il protocollo HTTP potrebbe trovare questo testo difficile da capire, ma chiunque abbia una conoscenza di base dei comandi e della sintassi del protocollo può interpretarlo facilmente).
Questo è un problema soprattutto quando gli utenti inviano dati sensibili tramite un sito Web o un'applicazione Web. Potrebbe essere una password, il numero di una carta di credito o qualsiasi altro dato inserito in un modulo e in HTTP tutti questi dati vengono inviati in chiaro affinché chiunque possa leggerli. (Quando un utente invia un modulo, il browser lo traduce in una richiesta HTTP POST anziché in una richiesta HTTP GET).
Quando un server di origine riceve una richiesta HTTP, invia una risposta HTTP, che è simile a quella riportata di seguito:
HTTP/1.1 200 OK
Date: Wed, 30 Jan 2019 12:14:39 GMT
Server: Apache
Last-Modified: Mon, 28 Jan 2019 11:17:01 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain
Hello World!
Se un sito Web utilizza HTTP invece di HTTPS, tutte le richieste e le risposte possono essere lette da chiunque stia monitorando la sessione. In sostanza, una persona malintenzionata può semplicemente leggere il testo nella richiesta o nella risposta e sapere esattamente quali informazioni vengono richieste, inviate o ricevute.
La S in HTTPS sta per "sicuro". HTTPS utilizza TLS (o SSL) per crittografare le richieste e le risposte HTTP, quindi nell'esempio sopra, invece del testo, l'autore di un attacco può vedere un gruppo di caratteri apparentemente casuali.
Invece di:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en
L'autore di un attacco vede valori simili a quelli riportati di seguito:
t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==
TLS utilizza una tecnologia chiamata crittografia con chiavi pubbliche: sono presenti due chiavi, una chiave pubblica e una chiave privata, e la chiave pubblica viene condivisa con i dispositivi client tramite il certificato SSL del server. Quando un client apre una connessione con un server, i due dispositivi utilizzano la chiave privata per concordare nuove chiavi, chiamate chiavi di sessione, per crittografare ulteriori comunicazioni tra di loro.
Tutte le richieste e le risposte HTTP vengono quindi crittografate con queste chiavi di sessione, in modo che chiunque intercetti le comunicazioni possa vedere solo una stringa casuale di caratteri, non il testo in chiaro.
Per ulteriori informazioni sul funzionamento della crittografia e delle chiavi, consulta Cos'è la crittografia?
Autenticazione significa verificare che una persona o una macchina sia davvero chi afferma di essere. In HTTP, non è prevista la verifica dell'identità: si basa su un principio di fiducia. Gli architetti di HTTP non hanno necessariamente preso la decisione di ritenere implicitamente attendibili tutti i server Web; all'epoca avevano semplicemente priorità diverse dalla sicurezza. Ma nell'Internet moderno, l'autenticazione è essenziale.
Proprio come un documento identificativo conferma l'identità di una persona, una chiave privata conferma l'identità del server. Quando un client apre un canale con un server di origine (ad esempio, quando un utente naviga su un sito Web), il possesso della chiave privata che corrisponde alla chiave pubblica nel certificato SSL di un sito Web dimostra che il server è effettivamente l'host legittimo del sito Web, impedendo o contribuendo a bloccare una serie di attacchi possibili in assenza di autenticazione, come ad esempio:
Inoltre, il certificato SSL è firmato digitalmente dall'autorità di certificazione che lo ha emesso. In questo modo, fornisce la conferma che il server è chi afferma di essere.
Cloudflare ha introdotto Universal SSL nel 2014 ed è stata la prima azienda a rendere gratuiti i certificati SSL. Qualsiasi sito Web registrato ai servizi Cloudflare può abilitare HTTPS e non utilizzare più HTTP con un semplice clic. In questo modo, la crittografia TLS è diventata ampiamente disponibile, per proteggere gli utenti e i loro dati utenti su Internet.
Per ulteriori informazioni su HTTP e HTTPS, consulta Cos'è un contenuto misto?