Tôi không biết về một công tắc dòng lệnh dễ sử dụng, nhưng trong openssl s_client
dòng lệnh, bạn có thể thêm -msg
tùy chọn để nhận được kết xuất thập lục phân của thông báo bắt tay. Sau đó tìm ServerKeyExchange
tin nhắn; Nó sẽ giống như thế này:
<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange
0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
(...)
và nó đọc theo cách đó:
0c 00 03 0b
: thông báo thuộc loại "ServerKeyExchange" (đó là "0c") có độ dài 0x00030B byte.
- Phần tử đầu tiên là mô đun DH là một số nguyên lớn, với tiêu đề có độ dài hai byte. Ở đây, độ dài được mã hóa thành
01 00
, có nghĩa là một số nguyên được mã hóa trên 0x0100 byte. Đó là 256 byte, vì vậy mô-đun có độ dài từ 2041 đến 2048 bit.
- Các byte mô-đun theo sau, theo thứ tự lớn không dấu. Các byte trên cùng của mô đun đó, trong trường hợp này ,
ff ff ff ff...
. Mô-đun sau đó có độ dài chính xác 2048 bit.
Tất nhiên, nếu bạn sử dụng bộ mật mã ECDHE (đường cong elip), thì ServerKeyExchange
định dạng sẽ khác.
Xem tiêu chuẩn cho định nghĩa của ServerKeyExchange
tin nhắn. Đối với DHE bộ mã hoá, nó có chứa các module p , máy phát điện g và máy chủ DH khóa công khai y , theo thứ tự, mỗi thể hiện dưới dạng một số nguyên lớn trong các định dạng mô tả ở trên (tiêu đề 16-bit có chứa chiều dài tính bằng byte, sau đó số nguyên giá trị trong mã hóa lớn cuối không dấu).
Các phiên bản gần đây OpenSSL có xu hướng chọn một kích thước DH mô đun phù hợp (từ một điểm bảo mật của xem) sức mạnh của cặp khóa của máy chủ (sử dụng để đăng ký các ServerKeyExchange
thông báo). Trong ví dụ trên, máy chủ có khóa RSA 2048 bit, do đó OpenSSL đã chọn sử dụng mô đun DH 2048 bit (trong trường hợp này là mô đun nổi tiếng được mô tả trong RFC 3526, phần 3 ).
Một số máy chủ khác dính vào các nhóm DH 1024 bit để đảm bảo khả năng tương thích với một số máy khách hiện tại không hỗ trợ các nhóm DH lớn hơn (người phạm tội lớn nhất là việc triển khai SSL trong Java, được sửa trong Java 8 build 56 vào năm 2012). Một lỗ hổng đã biết trong giao thức TLS, đối với các bộ mật mã DHE, là máy khách không có cách nào để xác định kích thước mô đun mà nó có thể hỗ trợ (điều này được sửa cho ECDHE, vì máy khách có thể chỉ định danh sách chính xác các đường cong mà nó chấp nhận) .
s_client
luôn hiển thị "chìa khóa máy chủ Temp" DH & kích thước hoặc ECDH & đường cong khi áp dụng, chỉ cần trước khi "bắt tay đã đọc x và y bằng văn bản", vì vậy bạn không còn cần để giải mã nó. Đây là mod_ssl Apache gần đây tự động chọn DHE: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcert vefile (lưu ý vấn đề về các máy khách Java).