1

我正在开发一个 C# .NET 应用程序,该应用程序需要与不同服务器上的不同服务进行通信。我不参与服务器的配置,所以我必须满足他们的安全要求。所有的通信都是通过使用 Flurl 的 http 调用进行的。

我从要求将 SecurityProtocolType 设置为 TLS 1.2 的服务器获取信息,因此在发送我的 http 请求之前,我将其设置在我的代码中:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

这很好用。问题是我必须从另一台服务器获取信息,如果我在 ServicePointManager 上设置了任何 SecurityProtocol,我将无法进行身份验证。如果我在 SecurityProtocol 上评论我之前的设置,我可以进行身份​​验证。如果我不这样做,我不能。

有什么方法可以“取消设置”、忽略或删除该 ServicePointManager.SecurityProtocol 设置?我已经尝试将它设置为 SystemDefaul,以及所有 tls 和 ssl 选项,但只有在我根本不设置它时它才会起作用。

在第二次通信中(我无法设置 SecurityProtocol),我也忽略了 SSL 问题

System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) {return true;};
4

1 回答 1

1

如上所述,协议的组合可以完成这项工作。在我的例子中,它必须包含 TLS 1.0,所以这行代码:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3

解决它(如果放在 HTTP 调用之前)

于 2018-07-16T12:41:12.643 回答