Remove/ignore ServicePointManager.SecurityProtocol 在 HTTP 请求上

Remove/ignore ServicePointManager.SecurityProtocol on HTTP requests

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

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

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

有什么方法可以 "unset",忽略或删除 ServicePointManager.SecurityProtocol 设置? 我试过将它设置为 SystemDefaul,所有 tls和 ssl 选项,但只有当我根本不设置它时它才会起作用。

在第二次通信中(我无法设置 SecurityProtocol 的那一次),我也忽略了

的 SSL 问题
System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) {return true;};

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

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

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