La versione SSL / TLS cambia ragione

3

Sto studiando il protocollo SSL / TLS, più specificamente la sua stretta di mano. So che inizialmente un client invia un messaggio Client Hello al server che include la versione TLS supportata dal client.

Ho un'applicazione che utilizza connessioni HTTPS, implementate con WinHTTP nel client e Apache Java nel server. Sto monitorando il traffico HTTPS con Wireshark , che assomiglia a questo:

Client Hello,         version-TLS 1.2
Server Hello,         version-TLS 1.2
Client Key Exchange,  version-TLS 1.2
Client Cipher spec,   version-TLS 1.2
Application data,     version-TLS 1.2
Encrypted alert       version-TLS 1.2  [from client]
FIN                   version-TLS 1.2
ACK                   version-TLS 1.2

Non so cosa significhi Encrypted alert (in Wireshark viene visualizzato come Encrypt alert (21) ) - poiché viene inviato dal client, suppongo che sia un avviso Chiudi notifica .

Alcuni secondi dopo che la sessione iniziale è stata chiusa, una nuova sessione inizia come segue:

Client Hello,         version-TLS 1.0
Server Hello,         version-TLS 1.0
Client Key Exchange,  version-TLS 1.0
Client Cipher spec,   version-TLS 1.0
Application data,     version-TLS 1.0
Encrypted alert       version-TLS 1.0  [from client]
FIN                   version-TLS 1.0
ACK                   version-TLS 1.0

Da questo, concludo le modifiche alla versione e quindi il codice.

Questo non sembra accadere ogni volta: a volte una nuova sessione utilizza TLS 1.2, a volte torna a TLS 1.0. Qual è la ragione di questo?

    
posta Vishal Santharam 15.05.2014 - 09:28
fonte

1 risposta

2

I tuoi log sono parziali; non mostri tutti i pacchetti. In particolare, non può esserci in SSL un record di "dati dell'applicazione" se una stretta di mano non è stata completata, e un handshake completo (abbreviato o meno) contiene necessariamente due "messaggi di cifratura". Inoltre, tieni presente che quando un sistema invia diversi messaggi successivi di handshake (come è comune per un server: il ServerHello di solito è seguito da un Certificate e poi da un ServerHelloDone ), i messaggi saranno solitamente racchiusi nello stesso < em> record .

Per quanto riguarda le versioni, ce ne sono due in SSL: la versione del protocollo negoziata in ClientHello e ServerHello , e quella utilizzata nelle intestazioni dei record. Non necessariamente corrispondono (anche se dovrebbero, almeno dopo la coppia di messaggi ciao). Dovresti ispezionare più approfonditamente questo campo.

Dopo una "modifica delle specifiche di cifratura", i record successivi sono crittografati, quindi Wireshark non può vedere il loro contenuto; solo il tipo generale (handshake, alert, dati dell'applicazione ...) è visibile, perché fa parte dell'intestazione del record. Questo è il motivo per cui vedi "avviso crittografato".

Alcuni client proveranno diverse versioni: inizialmente iniziano con una versione alta annunciata, ma a loro non piace quello che vedono, possono provare di nuovo con un'altra versione massima annunciata. Questo potrebbe essere ciò che osservi.

Questa risposta è un'introduzione dettagliata a SSL / TLS, che dovrebbe aiutare nell'analisi degli handshake registrati.

    
risposta data 15.05.2014 - 13:14
fonte

Leggi altre domande sui tag