HttpWebRequest失败,TLS 1.2

时间:2016-07-13 12:32:55

标签: c# .net ssl tls1.2

.NET 4.6.1下的最小,可复制的工作示例

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
WebRequest.Create("https://ir.netflix.com/").GetResponse();

产生以下WebException,

  

请求已中止:无法创建SSL / TLS安全通道。

只是自己访问该页面,运行openssl s_client -connect ir.netflix.com:443 -tls1_2或查看SSL Labs analysis summary表明该服务器正在运行正确的TLS 1.2。 HttpWebRequest似乎确实在某些时候适用于TLS 1.2(如建议here),

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
WebRequest.Create("https://www.ssllabs.com:10303").GetResponse();

使用ServerCertificateValidationCallback(请求对象的全局或本地)禁用证书验证永远不会调用回调;我想它永远不会达到这个目的,

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback =
    (sender, cert, chain, sslPolicyErrors) => true;

HttpWebRequest request = WebRequest.Create("https://ir.netflix.com/") as HttpWebRequest;
request.ServerCertificateValidationCallback =
    (sender, cert, chain, sslPolicyErrors) => true;
request.GetResponse();

更新:越过Wireshark dumps建议使用常见的签名哈希算法(带RSA的SHA256,带RSA的SHA1)和公共密码套件TLS_RSA_WITH_3DES_EDE_CBC_SHA(0x000a)。除了最初的两个" Client Hello"和"服务器Hello,证书,服务器Hello Done"数据包,不再与客户联系。

问题:导致此失败的原因是什么?有没有办法访问HttpWebRequest对象的更多调试信息?

(像这样禁用TLS 1.2,

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                     | SecurityProtocolType.Tls11;
WebRequest.Create("https://ir.netflix.com/").GetResponse();

有效,但不是最理想的,因为它会全局禁用TLS 1.2。似乎不是一个只为单个HttpWebRequest禁用TLS 1.2的设置。)

0 个答案:

没有答案