Protocollo handshake TLS
Il protocollo handshake(TLS)Transport Layer Security è responsabile dell'autenticazione e dello scambio di chiavi necessario per stabilire o riprendere sessioni protette. Quando si stabilisce una sessione di sicura, il protocollo handshake gestisce quanto segue:
- Negoziazione della suite di crittografia
- Autenticazione del server e, facoltativamente, del client
- Scambio di informazioni sulla chiave di sessione.
Negoziazione di Cipher Suite
Il client e il server effettuano il contatto e scelgono la suite di crittografia che verrà usata durante lo scambio di messaggi.
Autenticazione
In TLS, un server dimostra la propria identità al client. Il client potrebbe anche dover dimostrare la propria identità al server. PKI, l'uso di coppie di chiavi pubbliche/private, è la base di questa autenticazione. Il metodo esatto usato per l'autenticazione è determinato dalla suite di crittografia negoziata.
Scambio di chiavi
Il client e il server scambiano numeri casuali e un numero speciale denominato Pre-Master Secret. Questi numeri vengono combinati con dati aggiuntivi che consentono a client e server di creare il segreto condiviso, denominato Master Secret. Il master secret viene usato dal client e dal server per generare il segreto MAC di scrittura, ovvero la chiave di sessione usata per l'hashinge la chiave di scrittura, ovvero la chiave di sessioneusata per la crittografia.
Definizione di una sessione sicura tramite TLS
Il protocollo handshake TLS prevede i passaggi seguenti:
- Il client invia un messaggio "Client hello" al server, insieme al valore casuale del client e alle suite di crittografia supportate.
- Il server risponde inviando un messaggio "Server hello" al client, insieme al valore casuale del server.
- Il server invia il certificato al client per l'autenticazione e può richiedere un certificato dal client. Il server invia il messaggio "Server hello done".
- Se il server ha richiesto un certificato dal client, il client lo invia.
- Il client crea un segreto premaster casuale e lo crittografa con la chiave pubblica dal certificato del server, inviando il segreto premaster crittografato al server.
- Il server riceve il segreto preliminare. Il server e il client generano le chiavi master secret e sessione in base al segreto preliminare.
- Il client invia una notifica "Modifica specifica di crittografia" al server per indicare che il client inizierà a usare le nuove chiavi di sessione per l'hashing e la crittografia dei messaggi. Il client invia anche il messaggio "Client completato".
- Il server riceve "Modifica specifica di crittografia" e imposta lo stato di sicurezza del livello record su crittografia simmetrica usando le chiavi di sessione . Il server invia un messaggio "Server completato" al client.
- Client e server possono ora scambiare i dati dell'applicazione tramite il canale protetto stabilito. Tutti i messaggi inviati dal client al server e dal server al client vengono crittografati usando la chiave di sessione.
Ripresa di una sessione sicura tramite TLS
Il client invia un messaggio "Client hello" usando l'ID sessione della sessione da riprendere.
Il server controlla la cache della sessione per trovare un ID sessione corrispondente. Se viene trovata una corrispondenza e il server è in grado di riprendere la sessione, invia un messaggio "Server hello" con l'ID sessione.
Nota
Se non viene trovata una corrispondenza con ID sessione, il server genera un nuovo ID sessione e il client e il server TLS eseguono un handshake completo.
Client e server devono scambiare messaggi "Change cipher spec" e inviare messaggi "Client finished" e "Server finished".
Client e server possono ora riprendere lo scambio di dati dell'applicazione tramite il canale sicuro.