【问题标题】:Why is TLS relevant in non-secure http?为什么 TLS 与非安全 http 相关?
【发布时间】: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 这样的安全协议。该网页中可能存在受保护的重定向。

标签: c# http https tls1.2


【解决方案1】:

AllowAutoRedirect 在 WebClient 实例中默认设置为 true。 因此,请求会自动遵循来自您服务器的重定向响应。

只需将 AllowAutoRedirect 设置为 false,您将不会遵循任何重定向,因此您不必处理 SSL/TLS 握手。

当然,如果您的服务器不想使用 HTTP 服务您的请求,您将无法获得您正在寻找的内容。无论如何,将 AllowAutoRedirect 设置为 false 将帮助您确认您遇到的行为是由重定向引起的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2017-10-26
    • 2017-04-23
    相关资源
    最近更新 更多