来自asp.net应用程序的SSL握手失败 - 在浏览器中运行

时间:2015-12-17 11:42:17

标签: c# asp.net ssl

我正在尝试使用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握手响应。

Wireshark ssl handshake

希望有人能帮助我弄清楚发生了什么。

1 个答案:

答案 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浏览器可以使用。