覆盖的 SSL 证书在浏览器上工作,但在 C# 中不起作用



由于 SSL 证书覆盖,我的 C# 应用程序无法连接到我们公司网络中的 URL。如何解决?

我有一个 Web 应用程序在两个单独的服务器上运行,每个服务器绑定到不同的子域。类似的东西;

  • 应用程序: 网络应用程序 , 服务器: 1.2.3.4 , 主机名: a.myapp.com
  • 应用程序: 网络应用程序 , 服务器: 5.6.7.8 , 主机名: b.myapp.com

通常,我的本地 C# 应用程序可以通过 subdmoain 与两个服务器进行交互,没有任何问题。但是,当电脑连接到公司网络时,本地 C# 应用可以连接到绑定到子域 a.myapp.com 的 Web 应用,而无法连接到在 b.myapp.com 上运行的 Web 应用(接收超时错误(。我认为这是因为公司覆盖了现有的SSL证书并注入了自己的SSL证书。

请注意,我可以通过浏览器(chrome和IE(连接,没有任何问题。

到目前为止,我已经尝试过;

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

var handler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
};
var client = new HttpClient(handler);

没有用。

问题是,为什么浏览器可以毫无问题地连接,但系统.Net.Http.HttpClient收到超时?有没有办法模仿 HttpClient 中的浏览器证书流?

问题是公司防火墙。显然,防火墙在 .net 客户端应用程序和服务器之间的 SSL 握手期间丢弃了包。这是因为 .net 客户端默认使用 SChannel 密码套件,并且在防火墙上必须有针对这些密码套件的规则。自定义.net SSL密码套件的唯一方法是使用Bouncy castle。手动设置SSL密码套件后,它起作用了。

使用这个堆栈溢出问题作为参考

相关内容

最新更新