我有一个使用 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 安全通道
三件事:
他们的证书使用 TLS 1.2 和 AES 128,因此与 RC4 引起的错误无关。
这是在我的本地 Win 10 计算机上的 Visual Studio 2015 中,目标框架为 .NET 4.5.2。
为什么我会收到此错误?
编辑:
通过更改我的代码以使用基本 System.Net 和 WebRequest 类并添加以下行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
按照here的建议,它有效。 所以我猜 RestSharp 由于某种原因使用了不正确的协议?
即使对于 Restsharp 库,也可以使用以下行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
之前
IRestResponse response = client.Execute(request);
会起作用的。
在
.NET 4.5
中,TLS 1.2
可用,但默认不启用。
所以是的,如果您需要
TLS 1.2
,您需要以某种方式为 .NET 运行时指定它。
仅供参考: 在
.NET 4.7
中,.NET 将使用操作系统的默认 SSL/TLS 版本(大多数现代操作系统将 TLS 1.2
作为默认版本)
其他好的SO答案:
移动此行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
在此行之前:
WebRequest request = WebRequest.Create(url);
希望有帮助。
试试这个...
ServicePointManager.ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(
delegate { return true; }
);
我遇到了同样的问题。设置 SecurityProtocol 没有解决问题。
request.AlwaysMultipartFormData = false;
很好地解决了我的问题。
注意:它已经默认为False。但由于我的流程,我将其设置为 True。你可能也在这样做。只要确保它是假的