SSLv3 HandShake ma client TLSv1 ciao

4

Sto cercando di capire il protocollo di handshake, quando abbiamo avuto la nostra modalità di debug di ssl abbiamo visto che l'handshake è SSLv3, ma il client Hello come TLSv1.

link

Che cosa significa?

Il client invia un ClientHello SSLv3 in modo che un server che comprende solo SSLv3 possa elaborare quel messaggio e continuare con un handshake SSLv3. Ma SSLv3 ClientHello dice anche "a proposito, conosco TLSv1, quindi se conosci anche TLSv1, facciamo TLSv1 invece di SSLv3.

Per favore correggi se questo non ha senso, io non sono un network / IS guy.

    
posta Neetha 06.03.2015 - 15:09
fonte

3 risposte

7

Il tuo ultimo paragrafo è corretto: infatti, nel messaggio ClientHello , il client annuncia la sua "versione massima supportata". Quindi un client che supporta SSL 3.0 e TLS 1.0 dirà "I know fino a TLS 1.0" (internamente, "TLS 1.0" è codificato come "SSL 3.1"), ma accetterà comunque di utilizzare SSL 3.0. La versione del protocollo che verrà utilizzata viene scelta dal server (nel suo messaggio ServerHello ).

Ciò che osservate, tuttavia, è un artefatto di un'altra particolarità di SSL, ovvero che la versione è indicata due volte . Vale a dire, tutto il traffico in SSL viene inviato come record e tutti i record hanno un'intestazione di cinque byte che indica:

  • Il tipo di dati nel record (digitare "messaggio di handshake", "alert", "change cipher spec" o "application data") (un byte).
  • La versione del protocollo di registrazione (due byte).
  • La lunghezza del record (due byte).

Quindi la riga del rapporto si osserva:

http-8443-14, READ: SSLv3 Handshake, length = 87 *** ClientHello, TLSv1

probabilmente significa: "È stato osservato un record di tipo 'messaggio di handshake', versione SSL 3.0 e lunghezza 87 byte. Il suo contenuto si è rivelato essere un messaggio ClientHello che dice internamente 'I, il client, protocollo di supporto versioni fino a TLS 1.0 '. "

È consuetudine che i client SSL utilizzino una versione "bassa" (3.0) sul primo record perché ci sono server SSL vecchi e rotti che non solo non supportano TLS, ma anche il panico e muoiono di fronte a un record taggato "TLS 1.0", anche se il formato di un record TLS 1.0 non crittografato è assolutamente identico a quello di un record SSL 3.0 non crittografato (ad eccezione della versione nell'intestazione del record).

Per ulteriori informazioni su tali dettagli su SSL, leggi questo .

    
risposta data 06.03.2015 - 16:37
fonte
1

Mentre si omettono le informazioni sullo stack software che si sta utilizzando presumo che questo sia solo un altro caso di utilizzo delle routine di gestione SSLv3 per l'analisi dei dati TLSv1. Questo è possibile perché entrambi i protocolli sono molto simili. Con gli stack OpenSSL troverai molte routine che parlano di SSLv3 o qualcosa di simile con sslv3 nel nome della funzione, anche se elaborano dati TLSv1.0 +.

    
risposta data 06.03.2015 - 15:15
fonte
1

Questo è praticamente corretto. I dettagli sono presentati nelle RFC TLS , ma ecco la versione breve:

I messaggi TLS vengono inviati con diversi livelli; un messaggio ClientHello viene inviato all'interno di un record TLSPlaintext, che viene trasportato su (di solito) TCP. Il record TLSPlaintext ha un campo "versione", da cui proviene il SSLv3 che vedi. Il messaggio ClientHello ha un campo "client_version", che è il valore TLSv1 segnalato.

Un'implementazione TLS è supposta per accettare qualsiasi versione che inizi con "3" (TLSv1 è 3.1, TLSv1.1 è 3.2, ecc.). In pratica, alcuni server falliscono silenziosamente (invece di dare un avviso utile) se questa versione è più alta di quella che possono supportare. Di conseguenza, i client inviano solitamente "3.0" (SSLv3) o la versione minima che possono supportare.

    
risposta data 06.03.2015 - 16:35
fonte

Leggi altre domande sui tag