C#Web请求w RestSharp - "请求已中止:无法创建SSL / TLS安全通道"

时间:2018-04-17 19:13:41

标签: c# restsharp

我使用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安全通道

三件事:

  1. 我通过浏览器得到了我期望的回复,
  2. 我通过Postman获得了我期望的回复,
  3. 此请求正在发送到测试环境,但我可以将其发送到生产环境,该环境具有非常相似的地址,并获得我期望的响应,
  4. 我今天才对它有所了解。
  5. 他们的证书使用的是带有AES 128的TLS 1.2,因此它与RC4引起的错误无关。

    这是在Visual Studio 2015中的本地Win 10计算机上,其目标框架为.NET 4.5.2。

    为什么我会收到此错误?

    修改

    通过更改我的代码以使用基本System.Net和WebRequest类并添加以下行:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    

    根据here的建议,它有效。所以我猜RestSharp出于某种原因正在使用不正确的协议?

3 个答案:

答案 0 :(得分:3)

在.NET 4.5中,TLS 1.2可用,但默认情况下未启用。

是的,如果需要1.2,则需要在.NET运行时以某种方式指定它。

仅供参考: 在.NET 4.7中,.NET将使用操作系统的默认SSL / TLS版本(大多数现代操作系统将TLS 1.2作为其默认值)


其他不错的答案:

Default SecurityProtocol in .NET 4.5

答案 1 :(得分:1)

移动此行: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

在此行之前: WebRequest request = WebRequest.Create(url);

希望有帮助。

答案 2 :(得分:1)

即使是Restsharp库,也请使用下面的行

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

之前 IRestResponse response = client.Execute(request);

将起作用。