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