Un certificato SSL è un certificato digitale che autentica l’identità di un sito web e consente di instaurare una connessione crittografata. SSL è acronimo di Secure Sockets Layer, un protocollo di sicurezza che crea un link crittografato fra un server web e un browser web.
SSL assicura che tutti i dati scambiati fra un client (il browser dell’utente) e un server web (o altro servizio, come ftp, ecc.), in generale fra due sistemi, rimangano impossibili da leggere. Utilizza algoritmi di crittografia allo scopo di rendere irriconoscibili i dati in transito, per impedire agli hacker di leggerli mentre vengono trasmessi sulla connessione.
Per stabilire una sessione tra client e server in modalità https , viene prima eseguita la fase di “handshake SSL” , che prevede
- Scambio dei certificati pubblici
- Scambio delle sequenze di byte necessarie per costruire la master secret
- Verifica dell’autenticità dei certificati
- Creazione della chiave “master secret” , univoca per ogni sessione e comune a entrambi i sistemi, e che verrà usata per crittografare tutta la sessione di navigazione del client sul server.
- Messaggio di fine handshake, in cui viene verificato che tutto il processo sia stato regolare e la master secret sia utilizzabile.
Da questo momento può iniziare lo scambio dati tra client e server , tutto il traffico verrà crittografato , impedendo che un intruso sia in grado di leggere il traffico (sniffare), e possa introdursi nella sessione sostituendosi ad uno dei sistemi o di rubare delle informazioni.
Pertanto il certificato SSL assolve a tre funzioni
- Autenticità: assicura che il server sia chi dice di essere , e non un clone falso.
- Confidenzialità: definisce una chiave segreta comune ed unica per sessione , usata per crittografare il contenuto del messaggio.
- Integrità: garantisce che i messaggi tra server e client sia integri e non modificati da un intruso.
La comunicazione SSL tra client e server avviene su quattro fasi
- Fase di hello : server e client si scambiano i certificati pubblici e delle sequenze di byte casuali ; il client verifica l’autenticità del certificato inviato dal server.
- Processo di costruzione della master secret , la chiave comune unica per ogni sessione, che sarà usata per cifrare il traffico.
- Fase di finished : client e server si scambiano il primo messaggio usando la master secret , verificano l’esito positivo e concludono la fase di handshake.
- Inizio trasmissione cifrata tra server e client , tramite protocollo SSL.
In conclusione:
Il canale definito durante la fase di SSL handshake è immune da attacchi attivi man-in-the-middle poiché il sistema Server viene autenticato con un certificato digitale.
Il client può comunicare la pre-master secret al sistema server in modo sicuro attraverso la chiave pubblica presente nel certificato del server.
Solo il client e il server , tra cui è iniziata la fase di handshake (tramite il meccanismo chiave pubblica-chiave privata) , possono costruire la stessa master secret, su cui poi si fonda la costruzione di tutte le chiavi segrete adottate nelle comunicazioni successive.
La sequenza corrispondente al pre-master secret viene generata dal client e comunicata per via cifrata al server. La non predicibilità di questa sequenza è cruciale per la sicurezza del canale SSL.
Il messaggio di finished contiene tutte le informazioni scambiate nel corso dell’handshake. Lo scopo è effettuare un ulteriore controllo sulle comunicazioni precedenti per garantire che queste siano avvenute correttamente, che il client e il server dispongano della stessa Master Secret e che la comunicazione non sia stata oggetto di un attacco attivo.
Scendendo un poco nel dettaglio , abbiamo :
- Client hello
- Il client manda al server un messaggio di “client hello”
- richiede la creazione di una connessione SSL
- specifica le prestazioni di “sicurezza” che desidera siano garantite durante la connessione (l’elenco delle cipher suite che e’ in grado di supportare)
- invia una sequenza di byte casuali.
- Server hello
- Il server manda al client un messaggio di “server hello”
- seleziona la cipher suite che desidera
- invia una sequenza di byte casuali
- Se il client non riceve il messaggio di server hello , il client interrompe la comunicazione
- Invio certificato del server
- Il server invia il suo certificato pubblico (il crt) e i certificati pubblici della catena di certificazione della CA (Intermedi e di root)
- Invio del messaggio server hello done
- Il server invia il messaggio che definisce la conclusione dei messaggi per la definizione del tipo di protezione e relativi parametri.
- Verifica dei certificati
- Il client verifica la data di validita’ del certificato , che la CA sia trust , che la firma apposta dalla CA sia autentica (controllo con la CA). Se il certificato non è stato emesso da una CA pubblica, viene segnalato l’errore e richiesto se accettare comunque il certificato.
- Costruzione della pre-master secret
- Il client genera una sequenza di byte casuali
- la cifra con la chiave pubblica del server ricevuta nei passi precedenti
- spedisce la pre-master secret al server
- Server e client : Costruzione della master secret
- Sia il server che il client conoscono le sequenze di byte casuali scambiate tra server e client durante le fasi di client hello e server hello ; e conoscono la pre-master secret
- Server e client costruiscono la master secret (che sarà uguale per entrambi)
- L’uso delle sequenze di byte casuali scambiate durante le fasi di hello , client e server) genera una master secret diversa per ogni sessione SSL ; un intruso non può riutilizzare i messaggi di handshake catturati sul canale per sostituirsi in una successiva comunicazione
- Message finished
- E’ il primo messaggio protetto tramite master secret e cipher suite, che i due sistemi si scambiano
- Il messaggio viene prima costruito dal client e mandato al server
- Poi il server usando parte del messaggio inviato dal client , costruisce il proprio finished message e lo invia al client
- nei due invii la struttura del messaggio è la stessa, ma cambiano le informazioni in esso contenute
- Fine della fase handshake
- A questo punto la master secret è utilizzata dal client e dal server per costruire una propria tripla di dati
- Le triple del client e del server sono diverse tra loro ma note a entrambi i sistemi: ciascuno usa la propria, il che aumenta la sicurezza delle comunicazioni.
- Client e server sono pronti al colloquio cifrato e inizia la fase del protocollo SSL record
- Protocollo SSL record
- Il canale sicuro approntato dal protocollo SSL handshake viene realizzato dal protocollo SSL record.
- I dati sono frammentati in blocchi.
- Ciascun blocco viene numerato, compresso e autenticato mediante l’aggiunta di un MAC cifrato mediate il cifrario simmetrico su cui client e server si sono accordati , trasmesso dall’SSL record utilizzando il protocollo di trasporto sottostante.
- Il destinatario esegue un procedimento inverso sui blocchi ricevuti:
- decifra e verifica la loro integrità
- decomprime e riassembla i blocchi in chiaro
- consegna all’applicazione sovrastante.
Questo articolo, scritto da ArgonavisLAB , ha liberamente preso spunto da vari autori. Si ringraziano Kaspersky Lab e http://pages.di.unipi.it/bernasconi/CRI/ssl.pdf