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 .