【发布时间】:2020-01-14 21:08:55
【问题描述】:
由于 SSL 证书覆盖,我的 C# 应用程序无法连接到我们公司网络中的 url。怎么解决?
我有一个 Web 应用程序在两个单独的服务器上运行,每个服务器都绑定到不同的子域。类似的东西;
- 应用程序:WebApp,服务器:1.2.3.4,主机名:a.myapp.com
- 应用程序:WebApp,服务器:5.6.7.8,主机名:b.myapp.com
通常,我的本地 C# 应用程序可以通过 subdmoain 与两台服务器进行交互,而不会出现任何问题。但是,当 PC 连接到公司网络时,本地 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);
没用。
问题是,为什么浏览器可以毫无问题地连接,但 System.Net.Http.HttpClient 收到超时?有什么方法可以模拟 HttpClient 中的浏览器证书流?
【问题讨论】:
-
什么是“SSL证书覆盖”?
-
@John 这是公司重写网站现有 SSL 证书的时候。通常,网站 SSL 证书由 LetsEncrypt 颁发。但是,当我连接到公司互联网并访问网站并检查证书时,我看到“CompanyCA”作为证书颁发者。这意味着,公司使用自己的证书,因为证书颁发者已更改。我认为 SSL 证书覆盖是正确的术语。
-
哦,所以公司在所有机器上都安装了自己的证书,并且有一个代理服务器可以剥离现有的SSL并替换他们自己的证书?
-
@John 设备连接网络时安装。是的,公司用自己的证书代替。
-
如果是因为ssl,它不会给出超时错误作为它无法通信的原因。这就是为什么您尝试禁用 ssl 检查不起作用 - 因为它不是问题。我怀疑该网站前面有一些东西(我认为是防火墙)认为您的请求是恶意的并立即断开连接,请仔细检查您的应用程序在抛出错误之前等待多长时间。如果它在开始请求后立即出错,那么它可能会导致我的理论。请尝试使用
postman或更好的curl来模仿您的应用请求。
标签: c# ssl-certificate