Sto cercando di aggiungere il supporto per TLS 1.1 e 1.2 a un prodotto per l'acquisizione di pacchetti che ha già il supporto per TLS 1.0.
Ho usato Wireshark per catturare il traffico tra il mio browser e un server openssl per generare alcuni casi di test. Ho visto una versione TLS inaspettata che scorre in tutte le tracce che ho creato.
Secure Sockets Layer
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 105
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 101
Version: TLS 1.2 (0x0303)
Quanto sopra è un estratto di una delle tracce di TLS 1.2, come riportato da Wireshark. La versione fornita è TLS 1.0 in ClientHello e 1.2 in tutti i messaggi successivi. Questo è successo sia nelle tracce TLS 1.1 che in quelle 1.2.
Appendice E.1. (La compatibilità con TLS 1.0 / 1.1 e SSL 3.0) dalla RFC TLS 1.2 dice:
Earlier versions of the TLS specification were not fully clear on
what the record layer version number (TLSPlaintext.version) should
contain when sending ClientHello (i.e., before it is known which
version of the protocol will be employed). Thus, TLS servers
compliant with this specification MUST accept any value {03,XX} as
the record layer version number for ClientHello.
Questo di per sé è anche un po 'ambiguo per me.
Quindi le mie domande sono:
- Questo campo può essere un valore completamente arbitrario (purché sia SSLv3 o superiore)?
- Il comportamento cambierà in base alla versione fornita in questo campo?
- C'è qualche significato per il browser che sceglie TLS 1.0 piuttosto che SSLv3?
Related:
- link Questa risposta suggerisce che SSLv3 dovrebbe essere utilizzato in ClientHello per la massima interoperabilità. La menzione dell'interoperabilità implica che il server si preoccupa di quale valore viene fornito.