Ứng dụng của tôi phải nói chuyện với các máy chủ khác nhau qua https và cài đặt mặc định của ServicePointManager.SecurityProtocol = TLS
đã phục vụ tôi tốt cho đến ngày nay. Bây giờ tôi có một số máy chủ (như System.Net
hiển thị nhật ký theo dõi) không trả lời thông báo bắt tay TLS ban đầu nhưng vẫn giữ kết nối cơ bản mở cho đến khi hết thời gian chờ, ném một ngoại lệ hết thời gian chờ. Tôi đã thử đặt thời gian chờ của HttpWebRequest
tối đa 5 phút, với cùng một kết quả. Có lẽ những máy chủ này đang chờ một cái bắt tay SSL3 vì cả IE và Firefox đều có thể kết nối với những máy chủ này sau một thời gian trễ 30-40 giây. Dường như có một số cơ chế dự phòng trong .NET làm giảm TLS thành SSL3, nhưng nó không khởi động vì một lý do nào đó.Làm thế nào để sử dụng SSL3 thay vì TLS trong một HttpWebRequest cụ thể?
FWIW, đây là thông điệp bắt tay yêu cầu của tôi đang gửi (thường xuyên TLS 1.0 KHÁCH HÀNG Hello message):
00000000 : 16 03 01 00 57 01 00 00-53 03 01 4C 12 39 B4 F9 : ....W...S..L.9..
00000010 : A3 2C 3D EE E1 2A 7A 3E-D2 D6 0D 2E A9 A8 6C 03 : .,=..*z>......l.
00000020 : E7 8F A3 43 0A 73 9C CE-D7 EE CF 00 00 18 00 2F : ...C.s........./
00000030 : 00 35 00 05 00 0A C0 09-C0 0A C0 13 C0 14 00 32 : .5.............2
00000040 : 00 38 00 13 00 04 01 00-00 12 00 0A 00 08 00 06 : .8..............
00000050 : 00 17 00 18 00 19 00 0B-00 02 01 00 : ............
Có cách nào để sử dụng SSL3 thay vì TLS trong một đặc biệt HttpWebRequest
, hoặc buộc một fallback ? Dường như cài đặt của ServicePointManager
là toàn cầu và tôi thực sự ghét phải làm giảm cài đặt giao thức bảo mật thành SSL3 cho toàn bộ ứng dụng.
Bạn có thực sự kiểm tra giả thuyết của mình bằng cách thay đổi cài đặt kết nối thành SSL3 không? – Amnon
Vâng, giả thuyết đã chứng minh là chính xác. Các host là Netware, và có vẻ như chính sách của Netware liên quan đến các yêu cầu không được nhận ra/không hợp lệ, không trả lời hoặc đưa ra bất kỳ thông báo lỗi nào, có lẽ là giảm bề mặt tấn công. –