【发布时间】:2018-09-27 21:03:22
【问题描述】:
我有一个非常简单的使用 RestSharp 的网络请求:
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 安全通道
三件事:
- 我通过浏览器获得了预期的响应,
- 我通过 Postman 得到了预期的响应,
- 此请求正在发送到测试环境,但我可以将其发送到具有非常相似地址的生产环境,并获得我期望的响应,
- 我确信它在今天之前有效。
他们的证书使用 TLS 1.2 和 AES 128,因此与 RC4 引起的错误无关。
这是在我的本地 Win 10 机器上,使用 Visual Studio 2015,目标框架为 .NET 4.5.2。
为什么会出现这个错误?
编辑:
通过更改我的代码以使用基本 System.Net 和 WebRequest 类并添加以下行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
正如here 所建议的那样,它有效。所以我猜 RestSharp 出于某种原因使用了不正确的协议?
【问题讨论】:
-
网站证书有效吗?如果不是,您将需要处理 CertificateCallback 并手动验证
-
您的目标是哪个 .NET Framework/版本?你的操作系统是什么?这发生在您的(本地开发)机器还是(生产)服务器上?
-
查看 Windows 事件查看器以获得比 Windows 提供的一般消息更深入的错误原因。您应该能够从那里获得 TLS 错误代码。
-
我出于好奇下载了源代码(以前从未使用过 RestSharp)。在内部,它使用 System.Net.HttpWebRequest(继承 WebRequest)。我还遇到了在内部捕获异常并将其设置为 response.ErrorMessage 的代码(因此在某处引发了异常)。添加启用 TLS1.2 的行是否可以与您拥有的 RestSharp 代码一起使用?