Warum zeigt Wireshark hier Version TLS 1.2 anstelle von TLS 1.3 an?


8

Ich greife über einen Java-HTTP-Client mit TLS 1.3 auf den TLS 1.3-Testserver " https://tls13.pinterjann.is " zu. Alles scheint gut zu funktionieren, wie die HTML-Antwort zeigt:

HTML-Antwort

Was ich nicht verstehe: Warum wird Wireshark in der Übersicht Protokoll TLSv1.3 angezeigt, aber in der Detailversion TLS 1.2?

Zeigt Wireshark nur die falsche Version an oder verwende ich tatsächlich TLS 1.2?

Danke im Voraus für deine Unterstützung.

Wireshark ClientHallo Wireshark HelloRetry Wireshark ClientHello 2 Wireshark ServerHallo


Ist Ihre Kopie von Wireshark auf dem neuesten Stand?
Jesse P.

1
Ja, ich verwende Wireshark Version 2.6.5.
user120513

1
Interessanterweise stand auf einer Zeile 1,3, auf einer anderen 1,0 und auf einer anderen 1,2. Haben Sie ein anderes Erfassungsprogramm wie Fiddler ausprobiert?
Jesse P.

Nein, ich habe kein anderes Capture-Tool ausprobiert. Unterstützt Fiddler die Anzeige von TLS 1.3-Nachrichten?
user120513

Übrigens: Ich habe dieses Capture cloudshark.org/captures/64d433b1585a im Internet gefunden, wo dasselbe passiert. Ich denke, es ist eine Ungenauigkeit in der Art und Weise, wie Wireshark die Version im Detailbereich anzeigt.
user120513

Antworten:


14

Entschuldigung, für die Verwirrung fehlte mir die genaue TLS 1.3-Semantik: Beispielsweise muss im Client Hello das Feld "version" den festen Wert 0x0303 (TLS 1.2) enthalten, während die bevorzugte Version in der unterstützten Erweiterung "unterstützt" ist Versionen ".

Ab RFC 8446 (TLS 1.3-Spezifikation):

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: In früheren Versionen von TLS wurde dieses Feld für die Versionsaushandlung verwendet und stellte die höchste vom Client unterstützte Versionsnummer dar. Die Erfahrung hat gezeigt, dass viele Server die Versionsaushandlung nicht ordnungsgemäß implementieren, was zu einer "Versionsintoleranz" führt, bei der der Server ein ansonsten akzeptables ClientHello mit einer höheren Versionsnummer als der unterstützten ablehnt. In TLS 1.3 gibt der Client seine Versionseinstellungen in der Erweiterung "Supported_Versions" (Abschnitt 4.2.1) an, und das Feld "Legacy_Version" MUSS auf 0x0303 gesetzt sein. Dies ist die Versionsnummer für TLS 1.2. TLS 1. 3 ClientHellos haben eine Legacy-Version von 0x0303 und eine Supported-Version-Erweiterung mit 0x0304 als höchster Version. (Einzelheiten zur Abwärtskompatibilität finden Sie in Anhang D.)

Dies stimmt mit dem überein, was Wireshark anzeigt:

Von Wireshark unterstützte Versionen


1
Schöner Fund. Glückwunsch.
Jesse P.

1
Dies wurde vor 4 Tagen in einem Vortrag bei 35C3 behandelt: media.ccc.de/v/… Das Problem der "Versionsintoleranz" scheint auf "Unternehmens" -Geräten ziemlich weit verbreitet zu sein
cg909

5

Warum wird Wireshark in der Übersicht Protokoll TLSv1.3 angezeigt, aber in den Details Version TLS 1.2?

Wireshark meldet TLS 1.3 in der Protokollspalte, da Server Hello eine Erweiterung für unterstützte Versionen mit TLS 1.3 enthält.

Denken Sie daran, dass TLS-Sitzungen mit einem Handshake beginnen, um Parameter wie die Protokollversion und Chiffren auszuhandeln. Der Client sendet eine Client Hello-Handshake-Nachricht in einem TLS-Datensatz, der Folgendes enthält:

  • TLS-Datensatz - Version: Mindestunterstützte TLS-Version (in TLS 1.2 und früher). In TLS 1.3 wird dieses Feld nicht wirklich verwendet und MUSS aus Kompatibilitätsgründen 0x0303 ("TLS 1.2") oder 0x301 ("TLS 1.0") sein. Referenz: RFC 8446 (Seite 79)
  • Client Hello - Version: Maximal unterstützte TLS-Version (in TLS 1.2 und früher). In TLS 1.3 wird dieses Feld nicht verwendet, MUSS jedoch auf 0x0303 ("TLS 1.2") gesetzt werden. Referenz: RFC 8446 (4.1.2. Client Hallo)
  • Client Hello - Erweiterung für unterstützte Versionen: Liste der unterstützten Versionen. Dies ist der einzige Wert, der von TLS 1.3-Implementierungen verwendet wird (die möglicherweise TLS 1.3, 1.2 oder anderen Versionen entsprechen). Referenz: RFC 8446 (4.2.1. Unterstützte Versionen)

Der Server sendet eine Server Hello-Handshake-Nachricht mit:

  • Server Hello - Version: ausgehandelte Version (für TLS 1.2 und früher). Wenn TLS 1.3 ausgehandelt wird, MUSS es auf 0x0303 ("TLS 1.2") gesetzt sein.
  • Server Hello - Unterstützte Versionen: eine einzelne ausgehandelte Version (für TLS 1.3). Kann nicht zum Aushandeln früherer Versionen verwendet werden.

In TLS 1.2 sendet der Client eine Reihe unterstützter Versionen, während ein TLS 1.3-Client eine Liste der unterstützten Versionen sendet. Der Server wählt dann eine einzelne Version aus, verwendet jedoch aus Kompatibilitätsgründen ein neues Feld zur Auswahl von TLS 1.3 oder neuer.

(Selbst wenn ein Client Unterstützung für eine bestimmte Version ankündigt (z. B. über eine TLS-Datensatzversion mit "TLS 1.0"), kann der Handshake dennoch fehlschlagen, wenn der Server dieser niedrigen Version zustimmt.)

Noch etwas zu beachten: Wireshark versucht, ein Paket sofort nach dem Empfang zu interpretieren. Zum Zeitpunkt des Empfangs des Client Hello kennt er die endgültige Version nicht und nimmt daher die TLS-Datensatzversion an. Wenn der Server Hello empfangen wird, kann er die Version entsprechend anpassen:

$ 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
...

Bei einer Dissektion mit zwei Durchgängen (die auch die Wireshark-GUI enthält) wird die vereinbarte Version bekannt, wenn die Ergebnisse des zweiten Durchgangs gedruckt werden:

$ 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
...

Die oben verwendete Testaufnahme: https://github.com/wireshark/wireshark/blob/master/test/captures/tls13-rfc8446.pcap

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.