Tại sao Wireshark hiển thị trong tổng quan Giao thức TLSv1.3 nhưng trong chi tiết Phiên bản TLS 1.2?
Wireshark báo cáo TLS 1.3 trong cột giao thức do Server Hello chứa tiện ích mở rộng Phiên bản được hỗ trợ với TLS 1.3.
Hãy nhớ lại rằng các phiên TLS bắt đầu bằng một cái bắt tay để đàm phán các tham số như phiên bản giao thức và mật mã. Máy khách gửi tin nhắn bắt tay Client Xin chào trong bản ghi TLS có chứa:
- Bản ghi TLS - Phiên bản: phiên bản TLS được hỗ trợ tối thiểu (trong TLS 1.2 trở về trước). Trong TLS 1.3, trường này không thực sự được sử dụng và PHẢI là 0x0303 ("TLS 1.2") hoặc 0x602 ("TLS 1.0") cho mục đích tương thích. Tham khảo: RFC 8446 (trang 79)
- Xin chào khách hàng - Phiên bản: phiên bản TLS được hỗ trợ tối đa (trong TLS 1.2 trở về trước). Trong TLS 1.3, trường này không được sử dụng nhưng PHẢI được đặt thành 0x0303 ("TLS 1.2"). Tham khảo: RFC 8446 (4.1.2. Xin chào khách hàng)
- Xin chào khách hàng - Tiện ích mở rộng phiên bản được hỗ trợ: danh sách các phiên bản được hỗ trợ. Đây là giá trị duy nhất được sử dụng bởi các triển khai TLS 1.3 (có thể đồng ý TLS 1.3, 1.2 hoặc các phiên bản khác). Tham khảo: RFC 8446 (4.2.1. Phiên bản được hỗ trợ)
Máy chủ gửi tin nhắn bắt tay Server Hello với:
- Máy chủ Hello - Phiên bản: phiên bản đã thương lượng (đối với TLS 1.2 trở về trước). Nếu TLS 1.3 được đàm phán, nó PHẢI được đặt thành 0x0303 ("TLS 1.2").
- Máy chủ Xin chào - Phiên bản được hỗ trợ: phiên bản thương lượng duy nhất (đối với TLS 1.3). Không thể được sử dụng để đàm phán các phiên bản trước đó.
Vì vậy, trong TLS 1.2, máy khách sẽ gửi một loạt các phiên bản được hỗ trợ trong khi máy khách TLS 1.3 gửi danh sách các phiên bản được hỗ trợ. Sau đó, máy chủ sẽ chọn một phiên bản duy nhất, nhưng với mục đích tương thích, nó sẽ sử dụng một trường mới để chọn TLS 1.3 hoặc mới hơn.
(Ngay cả khi khách hàng quảng cáo hỗ trợ cho một số phiên bản (ví dụ: thông qua phiên bản bản ghi TLS có chứa "TLS 1.0"), nó vẫn có thể không bắt tay mặc dù nếu máy chủ đồng ý với phiên bản thấp này.)
Một điều khác cần lưu ý: Wireshark cố gắng giải thích một gói ngay lập tức khi nhận được. Tại thời điểm Client Hello được nhận, nó sẽ không biết phiên bản cuối cùng và do đó giả sử Phiên bản Bản ghi TLS. Khi nhận được Máy chủ Hello, nó có thể điều chỉnh phiên bản phù hợp:
$ 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
...
Trong phân tích hai đường chuyền (bao gồm GUI Wireshark), phiên bản đã thỏa thuận sẽ được biết khi in kết quả của đường chuyền thứ hai:
$ 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
...
Kiểm tra chụp được sử dụng ở trên: https://github.com/wireshark/wireshark/blob/master/test/captures/tls13-rfc8446.pcap