【发布时间】:2015-12-17 11:42:16
【问题描述】:
我正在尝试使用System.Net.Http.HttpClient(使用GetStringAsync)进行简单的获取请求。从我的 webapi asp.net 应用程序完成请求时请求失败,但在浏览器和邮递员中它可以正常工作。
请求失败,Authentication failed because the remote party has closed the transport stream.
注意:当使用 TLS 向其他服务器发出 get 请求时,它可以正常工作。
我使用以下内容确认问题出在 ssl 上。使用这两行代码可以使请求生效,但显然禁用证书验证并不是真正的解决方案。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
我使用https://www.ssllabs.com 测试了服务器,似乎 那里一切正常。它支持 TLS 1.1 和 1.2。
为了了解发生了什么,我查看了wireshark中的包,但由于我对ssl了解不多,所以我学的不多。查看浏览器请求中的包,我可以看到它使用的是 TLS 1.2 协议,并且握手看起来是正确的。 下图显示了客户端启动两个单独的 ssl "ClientHello's"。由于某种原因,服务器没有响应 SSL 握手响应。
希望有人能帮我弄清楚发生了什么。
【问题讨论】:
-
是否使用具有相同证书的 TLS 托管 webapi?