Mengapa Wireshark menunjukkan Versi TLS 1.2 di sini dan bukan TLS 1.3?

8

Saya mengakses server uji TLS 1.3 " https://tls13.pinterjann.is " melalui klien java http menggunakan TLS 1.3. Semuanya tampak berfungsi dengan baik seperti yang ditunjukkan oleh respons html:

Tanggapan HTML

Apa yang saya tidak mengerti: Mengapa Wireshark ditampilkan dalam Protokol TLSv1.3 tinjauan umum tetapi dalam rincian Versi TLS 1.2?

Apakah Wireshark hanya menampilkan Versi yang salah atau apakah saya sebenarnya menggunakan TLS 1.2?

Terima kasih sebelumnya atas dukungan Anda.

Wireshark ClientHello Wireshark HelloRetry Wireshark ClientHello 2 Wireshark ServerHello

pengguna120513
sumber
Apakah salinan Wireshark Anda terbaru?
Jesse P.
1
Ya, saya menggunakan Wireshark versi 2.6.5.
user120513
1
Cukup menarik, ia mengatakan 1,3 pada satu baris tetapi kemudian mengatakan 1,0 pada yang lain, kemudian 1,2 pada yang lainnya. Sudahkah Anda mencoba utilitas tangkapan yang berbeda, seperti Fiddler?
Jesse P.
Tidak, saya tidak mencoba alat tangkap lain. Apakah Fiddler mendukung menampilkan pesan TLS 1.3?
user120513
BTW: Saya menemukan tangkapan ini cloudshark.org/captures/64d433b1585a di internet, di mana hal yang sama terjadi. Saya kira itu adalah ketidaktepatan dalam cara Wireshark menampilkan versi di bagian detail.
user120513

Jawaban:

14

Maaf, untuk kebingungan ini, saya kehilangan semantik TLS 1.3 yang tepat: Misalnya, di Klien Halo, bidang "versi" harus berisi nilai tetap 0x0303 (TLS 1.2), sedangkan versi yang disukai terdapat dalam ekstensi "yang didukung versi ".

Dari RFC 8446 (spesifikasi 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: Dalam versi TLS sebelumnya, bidang ini digunakan untuk negosiasi versi dan mewakili nomor versi tertinggi yang didukung oleh klien. Pengalaman menunjukkan bahwa banyak server tidak menerapkan negosiasi versi dengan benar, yang mengarah ke "intoleransi versi" di mana server menolak ClientHello yang dapat diterima dengan nomor versi lebih tinggi dari yang didukungnya. Dalam TLS 1.3, klien menunjukkan preferensi versinya di ekstensi "didukung_versi" (Bagian 4.2.1) dan bidang legacy_version HARUS diatur ke 0x0303, yang merupakan nomor versi untuk TLS 1.2. TLS 1. 3 ClientHellos diidentifikasi memiliki legacy_version 0x0303 dan ekstensi yang didukung_versions hadir dengan 0x0304 sebagai versi tertinggi yang ditunjukkan di dalamnya. (Lihat Lampiran D untuk detail tentang kompatibilitas ke belakang.)

Ini setuju dengan apa yang ditampilkan oleh Wireshark:

Versi yang didukung Wireshark

pengguna120513
sumber
1
Temuan yang bagus. Selamat.
Jesse P.
1
Ini dibahas 4 hari yang lalu dalam sebuah kuliah di 35C3: media.ccc.de/v/… Masalah "intoleransi versi" tampaknya cukup luas pada perangkat "perusahaan"
cg909
5

Mengapa Wireshark ditampilkan dalam Protokol TLSv1.3 tinjauan umum tetapi dalam rincian Versi TLS 1.2?

Wireshark melaporkan TLS 1.3 di kolom protokol karena Server Hello berisi ekstensi Versi yang Didukung dengan TLS 1.3.

Ingat bahwa sesi TLS dimulai dengan jabat tangan untuk menegosiasikan parameter seperti versi protokol dan cipher. Klien mengirim pesan handshake Hello Klien dalam catatan TLS yang berisi:

  • Catatan TLS - Versi: versi TLS yang didukung minimum (dalam TLS 1.2 dan sebelumnya). Dalam TLS 1.3, bidang ini tidak benar-benar digunakan dan HARUS 0x0303 ("TLS 1.2") atau 0x301 ("TLS 1.0") untuk tujuan kompatibilitas. Referensi: RFC 8446 (halaman 79)
  • Client Hello - Version: versi TLS yang didukung maksimum (dalam TLS 1.2 dan sebelumnya). Di TLS 1.3, bidang ini tidak digunakan tetapi HARUS diatur ke 0x0303 ("TLS 1.2"). Referensi: RFC 8446 (4.1.2. Klien Halo)
  • Klien Halo - Ekstensi Versi yang Didukung: daftar versi yang didukung. Ini adalah satu-satunya nilai yang digunakan oleh implementasi TLS 1.3 (yang mungkin menyetujui TLS 1.3, 1.2 atau versi lainnya). Referensi: RFC 8446 (4.2.1. Versi yang Didukung)

Server mengirim pesan handshake Server Hello dengan:

  • Server Hello - Version: versi negosiasi (untuk TLS 1.2 dan sebelumnya). Jika TLS 1.3 dinegosiasikan, itu HARUS diatur ke 0x0303 ("TLS 1.2").
  • Server Hello - Versi yang Didukung: versi negosiasi tunggal (untuk TLS 1.3). Tidak dapat digunakan untuk menegosiasikan versi sebelumnya.

Jadi dalam TLS 1.2, klien mengirim berbagai versi yang didukung sementara klien TLS 1.3 mengirim daftar versi yang didukung. Server kemudian akan memilih versi tunggal, tetapi untuk tujuan kompatibilitas itu akan menggunakan bidang baru untuk memilih TLS 1.3 atau yang lebih baru.

(Bahkan jika klien mengiklankan dukungan untuk beberapa versi (misalnya melalui versi catatan TLS yang berisi "TLS 1.0"), itu masih bisa gagal jabat tangan meskipun jika server menyetujui versi rendah ini.)

Hal lain yang perlu diperhatikan: Wireshark mencoba menafsirkan suatu paket segera setelah diterima. Pada saat Klien Halo diterima, ia tidak akan mengetahui versi final dan oleh karena itu menganggap Versi Catatan TLS. Ketika Server Hello diterima, itu dapat menyesuaikan versi sesuai:

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

Dalam diseksi dua jalur (yang juga mencakup GUI Wireshark), versi yang disetujui akan diketahui saat mencetak hasil dari pass kedua:

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

Uji tangkap yang digunakan di atas: https://github.com/wireshark/wireshark/blob/master/test/captures/tls13-rfc8446.pcap

Lekensteyn
sumber