2016-08-03 37 views
0

Angenommen, meine Seite als Client unterstützt TLS V1.0, 1.1 und 1.2. Die Remote-Site unterstützt TLS V1.0 und 1.1. Beide Seiten unterstützen die gleichen Chiffren.TLS-Version stimmt nicht überein (?)

Meine Fragen:

1 - Zu meinem Verständnis werde ich initiieren immer die Kommunikation mit der höchsten TLS Version mit mir zur Verfügung stehen. In diesem Fall Wie kann ich mich jemals mit der anderen Seite verbinden?

2 - Das Folgende ist ein Wireshark CLIENT HELLO-Capture zwischen einem Client und einem Server, wie oben beschrieben.

TLSv1.1 Record Layer: Handshake Protocol: Client Hello 
    Content Type: Handshake (22) 
    Version: TLS 1.2 (0x0303) 
    Length: 172 
    Handshake Protocol: Client Hello 
     Handshake Type: Client Hello (1) 
     Length: 168 
     Version: TLS 1.2 (0x0303) 
     Random 
     Session ID Length: 0 
     Cipher Suites Length: 52 
     Cipher Suites (26 suites) 
     Compression Methods Length: 1 
     Compression Methods (1 method) 
     Extensions Length: 75 
     Extension: server_name 
     Extension: elliptic_curves 
     Extension: ec_point_formats 
     Extension: signature_algorithms 
     Extension: SessionTicket TLS 
     Extension: renegotiation_info 

Dieser Verbindungsversuch führt zu einem "Konnte keinen sicheren SSL/TLS-Kanal erstellen". Ich vermute, das hat etwas damit zu tun, was als "TLSV1.1 Record Layer" und die "Version: TLS 1.2 (0x0303)" beschrieben wird. Könnte das der Grund sein, dass die Verbindung fehlschlägt?

Antwort

2

Der Client startet den Handshake mit einem ClientHallo, wo er die beste unterstützte Version zeigt, d. H. TLS 1.2 in diesem Fall. Der Server antwortet dann mit einem ServerHello mit der besten Version, die der Server unterstützt, die gleich oder weniger der vom Client angebotenen Version ist (d. H. TLS 1.1 in Ihrem Fall). Wenn der Client nicht bereit ist, diese Version zu akzeptieren (d. H. Der Client ist so konfiguriert, dass er nur TLS 1.2 und nicht weniger unterstützt), wird die Verbindung geschlossen.

+0

Aber warum heißt es "TLSV1.1 Record Layer" und dann "Version: TLS 1.2"? – JustAGuy

+0

Erfasst gerade diese, die noch mehr verwirrend ist: http://imgur.com/hasn6rs – JustAGuy

+0

@gilfalko: Ich weiß nicht, warum es "TLSv1.1 Record Layer" in Ihrer Version von Wireshark sagt - in meiner sagt es "TLSv1.2 record layer", das passt, weil das Protokoll der Aufzeichnungsschicht in Ihrem ersten Beispiel TLS 1.2 ist. Und in Ihrem zweiten Beispiel ist das Aufzeichnungsschichtprotokoll TLS 1.0, während die ClientHello-Protokollversion TLS 1.2 ist. Trotzdem ist diese Zeile nur eine Zusammenfassung der folgenden Daten, d.h. die wahren Informationen sind nur in den Details. –

0

Ich nehme an, Sie haben eine ältere Version von Wireshark, da TLSv1.1 gemeldet wird, aber im darauffolgenden Paket zeigen sowohl der Record als auch der ClientHello eindeutig TLSv1.2 an. Speichere dein Capture, aktualisiere Wireshark und lade das Capture erneut.

UPDATE: Es ist wichtig, sicherzustellen, dass Ihr SSL \ TLS-Handshake abgeschlossen ist; Andernfalls wird Wireshark die falsche Version des TLS-Protokolls im Feld "Protokoll" melden.

0

Es gibt zwei TLS-Versionen, die mit einer Client-Hello-Nachricht gesendet werden. Die erste ist die Version der Datensatzschicht, die die Version von TLS beschreibt, die Sie zur Kommunikation verwenden. Die zweite Version ist der Client Hello-Wert, der die maximale Version angibt, die vom Client unterstützt wird.

Ich sehe drei TLS-Versionen in Ihrem Wireshark-Capture. Ich denke, der Verweis auf Version 1.1 in "TLSv1.1 Record Layer: Handshake-Protokoll: Client Hallo" ist falsch.

Es scheint, dass Ihr Client einen Client Hello mit Version 1.2 sendet, die in einer Datensatzschichtversion von 1.2 angegeben ist. Da der Server Version 1.2 nicht unterstützt, wird er auf der Datensatzebene abgelehnt. Um dies zu umgehen, könnte der Client einen Hello-Client der Version 1.2 innerhalb eines Datensatzes der Version 1.0 senden. Dies würde es dem Server ermöglichen, unter Verwendung von Version 1.0 zu kommunizieren, die Version 1.1 unterstützt, und nachfolgende Kommunikation würde Version 1.1 verwenden.