我使用RestSharp进行了非常简单的Web请求:
var client = new RestClient("https://website.net");
var request = new RestRequest("/process", Method.GET);
request.AddParameter("cmd", "execute");
IRestResponse response = client.Execute(request);
var content = response.Content;
Console.WriteLine("Response: " + content);
这将返回错误消息:
请求已中止:无法创建SSL / TLS安全通道
三件事:
他们的证书使用的是带有AES 128的TLS 1.2,因此它与RC4引起的错误无关。
这是在Visual Studio 2015中的本地Win 10计算机上,其目标框架为.NET 4.5.2。
为什么我会收到此错误?
修改
通过更改我的代码以使用基本System.Net和WebRequest类并添加以下行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
根据here的建议,它有效。所以我猜RestSharp出于某种原因正在使用不正确的协议?
答案 0 :(得分:3)
在.NET 4.5中,TLS 1.2可用,但默认情况下未启用。
是的,如果需要1.2,则需要在.NET运行时以某种方式指定它。
仅供参考: 在.NET 4.7中,.NET将使用操作系统的默认SSL / TLS版本(大多数现代操作系统将TLS 1.2作为其默认值)
其他不错的答案:
答案 1 :(得分:1)
移动此行: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
在此行之前: WebRequest request = WebRequest.Create(url);
希望有帮助。
答案 2 :(得分:1)
即使是Restsharp库,也请使用下面的行
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
之前 IRestResponse response = client.Execute(request);
将起作用。