【发布时间】:2019-04-23 01:24:16
【问题描述】:
我正在使用WebClient 从网络资源中获取数据:
var wc = new System.Net.WebClient();
var stream = wc.OpenRead("http://...");
// etc..
它曾经工作到最近,当时服务器会强制关闭连接。
基于this StackOverflow answer,我添加了ServicePointManager 设置:
var wc = new System.Net.WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var stream = wc.OpenRead("http://...");
// etc..
……它再次像以前一样工作。
我知道 TLS 与 HTTPS 相关,并且设置的效果是在握手中包含 TLS1.2,并且主机站点必须最近更新以拒绝旧的易受攻击的协议,但是 为什么普通的、不安全的 HTTP 需要它?
【问题讨论】:
-
我不知道
WebClient是否可以做到这一点,但它是否有可能将请求从 HTTP 升级到 HTTPS? -
根据代码,不清楚
WebClient是否切换到HTTPS。您应该能够使用像 Wireshark 这样的工具来分析数据包。如果实际的数据包通过 HTTPS,而不是 HTTP,那么很明显原因就在那里。 -
周围有很多“301 https://...”响应。默认情况下,Web 客户端将遵循重定向
-
据我所知,TLS 是对旧 SSL 的升级,它适用于像
HTTPS这样的安全协议。该网页中可能存在受保护的重定向。