📜  请求被中止,无法创建 ssl tls 安全通道. c# restsharp - C# (1)

📅  最后修改于: 2023-12-03 15:28:10.951000             🧑  作者: Mango

请求被中止,无法创建 ssl tls 安全通道. c# restsharp - C#

在使用 C# RestSharp 进行 HTTP 请求时,有时会出现以下错误:

System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.

这意味着请求无法成功完成,因为服务器无法建立 SSL/TLS 安全通道。

解决方案
1. 更新 .NET Framework 版本

首先,确保您的 .NET Framework 版本符合 RestSharp 要求的版本范围。RestSharp 支持 .NET Framework 4.5 及更高版本。

如果您的 .NET Framework 版本低于 4.5,请更新到最新版本。您可以从 Microsoft 下载官方的 .NET Framework 安装程序来更新您的系统。

2. 检查 SSL/TLS 协议版本

新版本的 .NET Framework 对 SSL/TLS 协议版本有更严格的要求。如果您的服务器运行的是一个旧版本的 SSL/TLS 协议,您需要将其更新到较新的版本,以便与 C# RestSharp 进行通信。

要检查您的服务器支持的 SSL/TLS 协议版本,请使用以下命令:

openssl s_client -connect servername:port

其中,servername 是您的服务器名称或 IP 地址,port 是 SSL/TLS 监听端口。

此命令将显示所有 SSL/TLS 通信,其中包含协议版本信息。如果您的服务器不支持 TLS 1.2 及更高版本,请在服务器上安装较新版本的 OpenSSL。

3. 使用 TLS1.2

如果您的服务器支持 TLS1.2,您可以强制使用 TLS1.2。在 RestRequest 对象中添加以下代码:

request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

此代码将强制 RestSharp 使用 TLS1.2 协议进行通信。

4. 允许不安全的连接

如果您没有办法更新服务器 SSL/TLS 协议版本,或者您只是需要在开发环境下进行测试,您可以使用以下代码允许不安全的连接:

ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

这将跳过 SSL/TLS 证书验证,并允许您与不支持较新 SSL/TLS 协议的服务器进行通信。

请注意,这应该只用于开发和测试,不应在生产环境中使用。

结论

C# RestSharp 是一个方便的库,可以让我们轻松地使用 HTTP 进行通信。但是,在使用时,如果遇到“请求被中止:不能创建 SSL/TLS 安全通道”的错误,需要进行一些设置,以便与服务器进行安全通信。通过更新 .NET Framework 版本、检查 SSL/TLS 协议版本,使用 TLS1.2 或允许不安全的连接等操作,可以解决该问题。