我正在尝试使用System.Net.Http.HttpClient
(使用GetStringAsync
)执行简单的获取请求。从我的webapi asp.net应用程序完成请求失败,但它可以从浏览器和邮递员正常工作。
请求因Authentication failed because the remote party has closed the transport stream.
注意:使用TLS向其他服务器请求时,它可以正常工作。
我使用以下内容确认问题与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"。由于某种原因,服务器没有响应SSL握手响应。
希望有人能帮助我弄清楚发生了什么。
答案 0 :(得分:1)
我使用https://www.ssllabs.com测试了服务器,似乎一切都在那里正常工作。它支持TLS 1.1和1.2。
您的客户端仅进行TLS 1.0握手。如果服务器仅支持TLS 1.1和TLS 1.2但不支持TLS 1.0,则连接将失败。由于现代浏览器都支持TLS 1.2浏览器可以使用。