Tôi có một ứng dụng gửi dữ liệu đến máy chủ bằng cách sử dụng POST HTTPS. Tôi sử dụng một đối tượng System.Net.WebClient để làm điều này. Đây là một chức năng sẽ gửi một số dữ liệu:Cách chỉ định giao thức SSL để sử dụng cho lớp WebClient
private byte[] PostNameValuePairs(string uri, NameValueCollection pairs)
{
byte[] response;
String responsestring = "";
using (WebClient client = new WebClient())
{
client.Headers = GetAuthenticationHeader();
string DataSent = GetNameValueCollectionValuesString(pairs);
try
{
response = client.UploadValues(uri, pairs);
responsestring = Encoding.ASCII.GetString(response);
}
catch (Exception e)
{
responsestring = "CONNECTION ERROR: " + e.Message;
return Encoding.ASCII.GetBytes(responsestring);
}
finally
{
_communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring);
}
}
return response;
}
Chúng tôi đang đi qua trong một sự khởi đầu với https URI: //
này đã làm việc tuyệt vời cho một thời gian dài. Hôm nay, chúng tôi bắt đầu nhận được lỗi kết nối sau: "Kết nối cơ bản đã bị đóng: Đã xảy ra lỗi không mong muốn khi gửi". Chúng tôi đã thực hiện một số khắc phục sự cố với chủ sở hữu máy chủ và cuối cùng họ đã thu hẹp nó xuống dưới đây. Họ đã thực hiện thay đổi đối với máy chủ của họ để chặn TLS 1.0 và cho biết bây giờ chúng tôi cần gửi dữ liệu của mình bằng TLS 1.1 hoặc 1.2.
Tôi cần phải đặt gì trong đối tượng WebClient của mình (hoặc ở nơi khác trong chức năng của tôi) để làm cho nó sử dụng TLS 1.1 hoặc 1.2 thay vì TLS 1.0?
Chúng tôi đang sử dụng .NET Framework 4.5 nếu điều đó tạo nên sự khác biệt.
@CodeCaster, trong khi câu trả lời có thể giống với [câu hỏi này] (http://stackoverflow.com/q/26389899/372643), không rõ nó trùng lặp hay không. Không có đề cập đến 'WebClient' ở tất cả các câu hỏi và giải thích khác, vì vậy giải thích cách các lớp này có liên quan có thể hữu ích, và người hỏi và những người đọc khác cũng có thể quan tâm đến các giải pháp tiềm năng để thiết lập điều này trên cơ sở từng trường hợp. . – Bruno
Tùy thuộc vào nền tảng bạn đang sử dụng, bạn cũng có thể quan tâm đến [câu hỏi khác này] (http://stackoverflow.com/q/30479973/372643). – Bruno
@Bruno chắc chắn, nhưng điều đó cũng đã được trả lời trước đó. Mặc dù vậy, tôi không thể tìm thấy một cái tên phù hợp và [dupe tôi chọn] (http://stackoverflow.com/questions/26389899/) giải thích tất cả điều này khá tốt. Câu hỏi mở lại này bây giờ dễ bị _ "sử dụng' System.Net.ServicePointManager.SecurityProtocol' "_ trả lời mà không có bất kỳ lời giải thích thích hợp trong họ, như đã có hàng trăm. Và theo [Đặt SecurityProtocol (Ssl3 hoặc TLS) trên .net HttpWebRequest theo yêu cầu] (http://stackoverflow.com/questions/3791629/), bạn không thể đặt nó theo yêu cầu. WebClient sử dụng HttpWebRequest nội bộ anyway. – CodeCaster