Problemi con HTTP e testo normale
Internet è un canale di comunicazione non affidabile. Quando invii o ricevi informazioni da un vecchio sito HTTP http://www.esempio.come nel tuo browser, molte cose possono accadere a metà dei tuoi pacchetti.
- Un cattivo attore può intercettare la comunicazione, copiare i dati per sé, prima di reinviarla nuovamente sul canale verso di te o verso il server con cui stavi parlando. All'insaputa di nessuna delle parti, le informazioni sono compromesse. Dobbiamo garantire che la comunicazione sia privato.
- Un cattivo attore può modificare le informazioni mentre vengono inviate sul canale. Bob potrebbe aver inviato un messaggio "X" ma Alice riceverebbe "sì" da Bob, perché un cattivo attore ha intercettato il messaggio e l'ha modificato. In altre parole, il integrità del messaggio è compromesso.
- Infine, e soprattutto, dobbiamo assicurarci che la persona con cui stiamo parlando sia davvero chi dice di essere. Tornando al esempio.come dominio. Come possiamo assicurarci che il server che ci ha risposto sia effettivamente il legittimo titolare di www.esempio.come? In qualsiasi punto della tua rete, puoi essere indirizzato erroneamente a un altro server. Un DNS da qualche parte è responsabile della conversione di un nome di dominio, come www.esempio.com, in un indirizzo IP su Internet pubblico. Ma il tuo browser non ha modo di verificare che l'indirizzo IP tradotto dal DNS.
I primi due problemi possono essere risolti crittografando il messaggio prima che venga inviato su Internet al server. Vale a dire, passando a HTTPS. Tuttavia, l'ultimo problema, il problema dell'identità è dove entra in gioco un'autorità di certificazione.
Avvio di sessioni HTTP crittografate
Il problema principale con la comunicazione crittografata su un canale non sicuro è "Come iniziamo??"
Il primissimo passo comporterebbe che le due parti, il tuo browser e il server, si scambino le chiavi di crittografia da scambiare sul canale non sicuro. Se non hai familiarità con il termine chiavi, pensale come una password generata casualmente molto lunga con la quale i tuoi dati verranno crittografati prima di essere inviati sul canale non sicuro.
Bene, se le chiavi vengono inviate su un canale non sicuro, chiunque può ascoltarlo e compromettere la sicurezza della tua sessione HTTPS in futuro. Inoltre, come possiamo fidarci che la chiave inviata da un server che dichiara di essere www.esempio.com è effettivamente il proprietario effettivo di quel nome di dominio? Possiamo avere una comunicazione crittografata con una parte dannosa mascherata da sito legittimo e non conoscere la differenza.
Quindi, il problema di garantire l'identità è importante se desideriamo garantire uno scambio di chiavi sicuro.
Autorità di certificazione
Potresti aver sentito parlare di LetsEncrypt, DigiCert, Comodo e alcuni altri servizi che offrono certificati TLS per il tuo nome di dominio. Puoi scegliere quello che si adatta alle tue esigenze. Ora, la persona/organizzazione proprietaria del dominio deve dimostrare in qualche modo alla propria autorità di certificazione di avere effettivamente il controllo sul dominio. Questo può essere fatto creando un record DNS con un valore univoco al suo interno, come richiesto dall'Autorità di Certificazione, oppure puoi aggiungere un file al tuo server web, con i contenuti specificati dall'Autorità di Certificazione, la CA può quindi leggere questo file e conferma di essere un valido proprietario del dominio.
Quindi negozi un certificato TLS con la CA e ciò si traduce in una chiave privata e in un certificato TLS pubblico rilasciato al tuo dominio. I messaggi crittografati dalla tua chiave privata possono quindi essere decifrati dal certificato pubblico e viceversa. Questo è noto come crittografia asimmetrica
I browser client, come Firefox e Chrome (a volte anche il sistema operativo) hanno la conoscenza delle autorità di certificazione. Queste informazioni vengono inserite nel browser/dispositivo fin dall'inizio (vale a dire, quando vengono installate) in modo che sappiano che possono fidarsi di determinate CA. Ora, quando provano a connettersi a www.esempio.com su HTTPS e vedere un certificato emesso da, diciamo DigiCert, il browser può effettivamente verificare che utilizzando le chiavi memorizzate localmente. In realtà, ci sono alcuni passaggi intermedi in più, ma questa è una buona panoramica semplificata di ciò che sta accadendo.
Ora che il certificato fornito da www.esempio.com può essere attendibile, questo viene utilizzato per negoziare una chiave di crittografia simmetrica univoca che viene utilizzata tra il client e il server per il resto della loro sessione. Nella crittografia simmetrica, una chiave viene utilizzata sia per crittografare che per decifrare ed è solitamente molto più veloce della sua controparte asimmetrica.
sfumature
Se l'idea di TLS e della sicurezza Internet ti attira, puoi approfondire questo argomento scavando in LetsEncrypt e nella loro CA TLS gratuita. Ci sono molte più minuzie in tutta questa trafila di quanto detto sopra.
Altre risorse che posso consigliare per saperne di più su TLS sono il blog di Troy Hunt e il lavoro svolto da EFF come HTTPS Everywhere e Certbot. Tutte le risorse sono ad accesso gratuito e sono davvero economiche da implementare (devi solo pagare per la registrazione del nome di dominio e le tariffe orarie del VPS) e ottenere un'esperienza pratica.