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