Perché Wireshark mostra qui la versione TLS 1.2 anziché TLS 1.3?


8

Sto accedendo al server di test TLS 1.3 " https://tls13.pinterjann.is " tramite un client http Java utilizzando TLS 1.3. Tutto sembra funzionare bene come indica la risposta html:

Risposta HTML

Cosa non capisco: perché Wireshark mostra nella panoramica Protocollo TLSv1.3 ma nei dettagli Versione TLS 1.2?

Wireshark sta solo visualizzando la versione sbagliata o sto effettivamente utilizzando TLS 1.2?

Grazie in anticipo per il tuo supporto.

Wireshark ClientHello Wireshark HelloRetry Wireshark ClientHello 2 Wireshark ServerHello


La tua copia di Wireshark è aggiornata?
Jesse P.

1
Sì, sto usando Wireshark versione 2.6.5.
user120513

1
È interessante notare che ha detto 1.3 su una riga ma poi ha detto 1.0 su un'altra, quindi 1.2 su un'altra ancora. Hai provato una diversa utility di acquisizione, come Fiddler?
Jesse P.

No, non ho provato un altro strumento di acquisizione. Fiddler supporta la visualizzazione di messaggi TLS 1.3?
user120513

A proposito: ho trovato questa acquisizione cloudshark.org/captures/64d433b1585a su Internet, dove accade la stessa cosa. Immagino sia un'inesattezza nel modo in cui Wireshark mostra la versione nella sezione dei dettagli.
user120513

Risposte:


14

Spiacenti, per la confusione, mi mancava l'esatta semantica TLS 1.3: Ad esempio, nel client Hello, il campo "versione" deve contenere il valore fisso 0x0303 (TLS 1.2), mentre la versione preferita è contenuta nell'estensione "supportata le versioni".

Da RFC 8446 (specifica TLS 1.3):

struct {
      ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
      Random random;
      opaque legacy_session_id<0..32>;
      CipherSuite cipher_suites<2..2^16-2>;
      opaque legacy_compression_methods<1..2^8-1>;
      Extension extensions<8..2^16-1>;
  } ClientHello;

legacy_version: nelle versioni precedenti di TLS, questo campo veniva utilizzato per la negoziazione della versione e rappresentava il numero di versione più alto supportato dal client. L'esperienza ha dimostrato che molti server non implementano correttamente la negoziazione della versione, portando a "intolleranza alla versione" in cui il server rifiuta un ClientHello altrimenti accettabile con un numero di versione superiore a quello supportato. In TLS 1.3, il client indica le sue preferenze di versione nell'estensione "support_versions" (Sezione 4.2.1) e il campo legacy_version DEVE essere impostato su 0x0303, che è il numero di versione per TLS 1.2. TLS 1. 3 ClientHellos sono identificati come aventi una versione legacy_version di 0x0303 e un'estensione support_versions presente con 0x0304 come la versione più alta ivi indicata. (Vedi Appendice D per dettagli sulla compatibilità con le versioni precedenti.)

Ciò concorda con ciò che Wireshark mostra:

Wireshark versioni supportate


1
Bella scoperta. Congratulazioni.
Jesse P.

1
Questo è stato trattato 4 giorni fa in una lezione al 35C3: media.ccc.de/v/… Il problema dell '"intolleranza alla versione" sembra essere abbastanza diffuso sui dispositivi "enterprise"
cg909

5

Perché Wireshark mostra nella panoramica Protocollo TLSv1.3 ma nei dettagli Versione TLS 1.2?

Wireshark riporta TLS 1.3 nella colonna del protocollo a causa del Server Hello contenente un'estensione Versioni supportate con TLS 1.3.

Ricordiamo che le sessioni TLS iniziano con una stretta di mano per negoziare parametri come la versione del protocollo e le cifre. Il client invia un messaggio di handshake di Client Hello in un record TLS contenente:

  • Record TLS - Versione: versione minima supportata TLS (in TLS 1.2 e precedenti). In TLS 1.3, questo campo non è realmente utilizzato e DEVE essere 0x0303 ("TLS 1.2") o 0x301 ("TLS 1.0") per motivi di compatibilità. Riferimento: RFC 8446 (pagina 79)
  • Client Hello - Versione: versione TLS massima supportata (in TLS 1.2 e precedenti). In TLS 1.3, questo campo non è utilizzato ma DEVE essere impostato su 0x0303 ("TLS 1.2"). Riferimento: RFC 8446 (4.1.2. Client Hello)
  • Client Hello - Estensione versioni supportate: elenco delle versioni supportate. Questo è l'unico valore utilizzato dalle implementazioni TLS 1.3 (che possono concordare TLS 1.3, 1.2 o altre versioni). Riferimento: RFC 8446 (4.2.1. Versioni supportate)

Il server invia un messaggio di handshake Server Hello con:

  • Server Hello - Versione: versione negoziata (per TLS 1.2 e precedenti). Se TLS 1.3 viene negoziato, DEVE essere impostato su 0x0303 ("TLS 1.2").
  • Server Hello - Versioni supportate: un'unica versione negoziata (per TLS 1.3). Non può essere utilizzato per negoziare versioni precedenti.

Pertanto, in TLS 1.2, il client invia un intervallo di versioni supportate mentre un client TLS 1.3 invia un elenco di versioni supportate. Il server sceglierà quindi una singola versione, ma per motivi di compatibilità utilizzerà un nuovo campo per selezionare TLS 1.3 o successivo.

(Anche se un client pubblicizza il supporto per alcune versioni (ad esempio tramite una versione del record TLS contenente "TLS 1.0"), potrebbe comunque fallire l'handshake se il server accetta questa versione bassa.)

Un'altra cosa da tenere presente: Wireshark cerca di interpretare immediatamente un pacchetto quando viene ricevuto. Al momento della ricezione del client Hello, non conoscerà la versione finale e pertanto assumerà la versione del record TLS. Quando viene ricevuto Server Hello, è possibile regolare la versione di conseguenza:

$ tshark -r test/captures/tls13-rfc8446.pcap 
    1   0.000000     10.9.0.1 → 10.9.0.2     TLSv1 304 Client Hello
    2   0.002634     10.9.0.2 → 10.9.0.1     TLSv1.3 658 Server Hello, Change Cipher Spec, Application Data
    3   0.005266     10.9.0.1 → 10.9.0.2     TLSv1.3 130 Change Cipher Spec, Application Data
    4   0.005772     10.9.0.2 → 10.9.0.1     TLSv1.3 468 Application Data
...

In una dissezione a due passaggi (che include anche la GUI di Wireshark), la versione concordata sarà nota quando stampa i risultati del secondo passaggio:

$ tshark -r test/captures/tls13-rfc8446.pcap -2
    1   0.000000     10.9.0.1 → 10.9.0.2     TLSv1.3 304 Client Hello
    2   0.002634     10.9.0.2 → 10.9.0.1     TLSv1.3 658 Server Hello, Change Cipher Spec, Application Data
    3   0.005266     10.9.0.1 → 10.9.0.2     TLSv1.3 130 Change Cipher Spec, Application Data
    4   0.005772     10.9.0.2 → 10.9.0.1     TLSv1.3 468 Application Data
...

Acquisizione test utilizzata sopra: https://github.com/wireshark/wireshark/blob/master/test/captures/tls13-rfc8446.pcap

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.