WiresharkがTLS 1.3ではなくバージョンTLS 1.2を表示するのはなぜですか?


8

TLS 1.3 を使用するJava httpクライアントを介してTLS 1.3テストサーバー「https://tls13.pinterjann.is」にアクセスしています。HTML応答が示すように、すべてが正常に動作しているようです。

HTML応答

理解していないこと:WiresharkがプロトコルTLSv1.3の概要に、バージョンTLS 1.2の詳細に表示されるのはなぜですか?

Wiresharkが間違ったバージョンを表示しているだけですか、それとも実際にTLS 1.2を使用していますか?

よろしくお願いします。

Wireshark ClientHello Wireshark HelloRetry Wireshark ClientHello 2 Wireshark ServerHello


Wiresharkのコピーは最新ですか?
ジェシー

1
はい、Wiresharkバージョン2.6.5を使用しています。
user120513

1
興味深いことに、ある行では1.3と言っていましたが、別の行では1.0、次に別の行では1.2と言っていました。Fiddlerなどの別のキャプチャユーティリティを試しましたか?
ジェシー

いいえ、別のキャプチャツールを試していません。FiddlerはTLS 1.3メッセージの表示をサポートしていますか?
user120513

ところで、私はこのキャプチャcloudshak.org/captures/64d433b1585aをインターネットで見つけましたが、同じことが起こります。Wiresharkが詳細セクションにバージョンを表示する方法が不正確であると思います。
user120513 2018

回答:


14

申し訳ありませんが、混乱のため、TLS 1.3の正確なセマンティクスが欠けていました。たとえば、Client Helloでは、フィールド「バージョン」に固定値0x0303(TLS 1.2)が含まれている必要がありますが、優先バージョンは「サポートされている」拡張に含まれていますバージョン」。

RFC 8446(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:以前のバージョンのTLSでは、このフィールドはバージョンネゴシエーションに使用され、クライアントがサポートする最大のバージョン番号を表していました。多くのサーバーがバージョンネゴシエーションを適切に実装していないため、サーバーがサポートしているバージョン番号よりも大きいバージョン番号の許容可能なClientHelloをサーバーが拒否する「バージョン不寛容」につながることが経験上わかっています。TLS 1.3では、クライアントはそのバージョン設定を "supported_versions"拡張(セクション4.2.1)に示し、legacy_versionフィールドはTLS 1.2のバージョン番号である0x0303に設定する必要があります。TLS 1。3 ClientHelloは、legacy_versionが0x0303であり、supported_versions拡張子が0x0304で示されている中で最も高いバージョンとして存在すると識別されます。(下位互換性の詳細については、付録Dを参照してください。)

これはWiresharkが表示するものと一致します。

Wiresharkがサポートするバージョン


1
いい発見。おめでとうございます。
Jesse P.

1
これは、35C3での講演で4日前に覆われていた:media.ccc.de/v/...「バージョン不寛容」の問題は、「企業」のデバイスではかなり広範であるように思わ
cg909

5

WiresharkがプロトコルTLSv1.3の概要に、バージョンTLS 1.2の詳細に表示されるのはなぜですか?

Wiresharkは、TLS 1.3でサポートされているバージョンの拡張機能がServer Helloに含まれているため、プロトコル列にTLS 1.3を報告します。

TLSセッションは、プロトコルバージョンや暗号などのパラメータをネゴシエートするためのハンドシェイクで始まることを思い出してください。クライアントは、以下を含むTLSレコードでClient Helloハンドシェイクメッセージを送信します。

  • TLSレコード-バージョン:サポートされている最小のTLSバージョン(TLS 1.2以前)。TLS 1.3では、このフィールドは実際には使用されず、互換性のために0x0303( "TLS 1.2")または0x301( "TLS 1.0")でなければなりません。参照:RFC 8446(79ページ)
  • Client Hello-バージョン:サポートされている最大のTLSバージョン(TLS 1.2以前)。TLS 1.3では、このフィールドは使用されませんが、0x0303( "TLS 1.2")に設定する必要があります。参照:RFC 8446(4.1.2。Client Hello)
  • Client Hello-サポートされているバージョンの拡張子:サポートされているバージョンのリスト。これは、TLS 1.3実装で使用される唯一の値です(TLS 1.3、1.2、または他のバージョンに同意する場合があります)。参照:RFC 8446(4.2.1。サポートされているバージョン)

サーバーは、Server Helloハンドシェイクメッセージを送信します。

  • サーバーHello-バージョン:ネゴシエートされたバージョン(TLS 1.2以前の場合)。TLS 1.3がネゴシエートされる場合は、0x0303( "TLS 1.2")に設定する必要があります。
  • Server Hello-サポートされているバージョン:ネゴシエートされた単一のバージョン(TLS 1.3の場合)。以前のバージョンのネゴシエーションには使用できません。

したがって、TLS 1.2では、クライアントはサポートされているバージョンの範囲を送信し、TLS 1.3クライアントはサポートされているバージョンのリストを送信します。その後、サーバーは単一のバージョンを選択しますが、互換性のために、TLS 1.3以降を選択するための新しいフィールドを使用します。

(クライアントが一部のバージョンのサポートをアドバタイズした場合でも(たとえば、「TLS 1.0」を含むTLSレコードバージョンを介して)、サーバーがこの低いバージョンに同意している場合でも、ハンドシェイクに失敗する可能性があります。)

もう1つ注意すべき点:Wiresharkは、パケットを受信するとすぐに解釈しようとします。Client Helloを受信した時点では、最終的なバージョンを認識していないため、TLSレコードバージョンを想定しています。Server Helloを受信すると、それに応じてバージョンを調整できます。

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

2パス分析(Wireshark GUIも含む)では、2回目のパスの結果を出力するときに、合意されたバージョンがわかります。

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

上記で使用したテストキャプチャ:https : //github.com/wireshark/wireshark/blob/master/test/captures/tls13-rfc8446.pcap

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.