📜  C# 请求被中止:无法创建 SSL TLS 安全 - C# (1)

📅  最后修改于: 2023-12-03 14:39:48.017000             🧑  作者: Mango

C# 请求被中止:无法创建 SSL/TLS 安全

在使用 C# 编写网络请求时,你可能会遇到以下异常信息:

请求被中止:无法创建 SSL/TLS 安全通道。

这个错误通常是由于请求对象的安全协议未正确配置而引起的。以下是一些可能导致此错误的原因和解决方案:

原因 1:协议不受支持

请求对象使用的安全协议可能不受服务器支持。例如,你的请求对象可能正在尝试使用 TLS 1.2 协议,但服务器仅支持 TLS 1.0。要解决此问题,请在请求对象上显式设置支持的协议版本。例如,以下示例将请求对象的安全协议设置为 TLS 1.0:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

如果服务器支持的协议版本不确定,可以通过以下代码为请求对象启用所有支持的协议:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | 
                                         SecurityProtocolType.Tls | 
                                         SecurityProtocolType.Tls11 | 
                                         SecurityProtocolType.Tls12;
原因 2:证书问题

服务器可能不信任客户端请求的证书或客户端未正确配置证书。要解决此问题,请执行以下步骤:

  1. 确保请求对象使用正确的证书。
  2. 配置请求对象以使用具有正确受信任颁发机构的证书。
  3. 确保服务器信任请求对象的证书。

以下示例演示如何在请求对象上配置证书:

ServicePointManager.ServerCertificateValidationCallback +=
    (sender, certificate, chain, sslPolicyErrors) => true;

这个示例中我们忽略了服务器证书验证错误,不建议在生产环境中使用。

原因 3:代理问题

如果请求通过代理服务器发送,则代理服务器连接到服务器时可能会遇到问题。要解决此问题,请考虑以下选项:

  1. 配置代理服务器以正确连接到目标服务器。
  2. 不使用代理服务器发送请求。

以下示例演示如何在请求对象上配置代理服务器:

WebRequest request = WebRequest.Create("http://www.contoso.com/");
request.Proxy = new WebProxy("http://proxyserver:80/");

代理服务器的地址和端口需要根据实际情况进行修改。

结论

以上是 C# 请求被中止:无法创建 SSL/TLS 安全通道的可能原因和解决方案。选择适合你的解决方案,解决网络请求中遇到的问题。