删除/忽略HTTP请求上的ServicePointManager.SecurityProtocol

时间:2018-07-12 18:45:14

标签: c# .net http flurl

我正在使用一个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;};

1 个答案:

答案 0 :(得分:0)

如上所述,协议的组合可以完成这项工作。就我而言,它必须包含TLS 1.0,因此此行代码:

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

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