为什么除了 HTTPS 之外我还应该提供 HTTP?

信息安全 tls http hsts
2021-08-18 01:49:58

我正在设置一个新的网络服务器。除了 TLS/HTTPS,我还在考虑实施Strict-Transport-Security和其他 HTTPS 强制机制。

这些似乎都是基于我在服务http://www.example.com之外的假设https://www.example.com为什么我不只提供 HTTPS?也就是说,是否有基于安全的理由来提供 HTTP 服务——例如,http://www.example.com如果我不设置 HSTS,有人会欺骗吗?

4个回答

出于可用性原因,您需要提供从所有 HTTP URL:s 到 HTTPS 的重定向。否则,首次访问example.com/some/page浏览器的 URL 栏的访问者会遇到连接错误。

提供重定向不会让您更容易受到攻击。浏览器中没有您的 HSTS 条目的用户无论如何都会发出 HTTP 请求。HTTP 上是否有真正的服务与中间人无关。

所以你需要运行一个 HTTP 服务器,但它不需要响应任何东西,只需要重定向。

为什么我不只提供 https 服务?

主要原因是浏览器的默认行为向后兼容性

默认行为

当最终用户(即不了解协议或安全性)在其浏览器中键入网站地址时,浏览器默认使用 HTTP。有关浏览器为何选择此行为的更多信息,请参阅此问题。

因此,用户很可能无法访问您的网站。

向后兼容性

一些使用旧系统和旧浏览器的用户可能不支持 HTTPS,或者更有可能没有最新的根证书数据库,或者不支持某些协议。

在这种情况下,他们要么无法访问该网站,要么会收到安全警告。您需要定义最终用户的安全性是否重要到足以强制使用 HTTPS。

许多网站仍然收听 HTTP,但会自动重定向到 HTTPS,并忽略使用非常旧的浏览器的用户。

如果我不设置 HSTS ,有人可以欺骗http://www.example.com吗?

如果攻击者想要欺骗http://www.example.com,它需要控制域或以某种方式控制 IP 地址。

我假设您的意思是:攻击者可以执行中间人攻击吗?

在这种情况下是的,但即使有或没有 HSTS:

  • 没有 HSTS:攻击者可以很容易地在您的服务器和用户中间,并且是主动的(即修改内容)或被动的(即窃听)

  • 使用 HSTS:用户第一次尝试使用 HTTP 访问站点时,攻击者可能会强制用户使用 HTTP。但是,攻击者执行攻击的时间窗口有限。

你应该怎么做?

像许多网站一样,您应该允许 HTTP 连接并使服务器将用户重定向到 HTTPS 版本。通过这种方式,您可以覆盖浏览器的默认行为并确保您的用户使用 HTTPS 版本。

没有适当协议或根证书的旧系统将无法访问该站点(或至少会有警告),但根据您的用户群,这应该不是问题。

结论

禁用 HTTP 弊大于利。它并没有真正提供更多的安全性。

为保护资源而添加的任何安全措施如果阻止其大多数用户访问它,则它是无用的。如果您的最终用户无法访问您的网站,因为他们的浏览器默认使用 HTTP,而您不侦听 HTTP 连接,那么有什么好处?

只需执行 HTTP 301 重定向到 HTTPS 版本。

相关问题

投票赞成的答案非常好。如果您完全关闭 HTTP,您将牺牲可用性而不会对安全性产生重大影响。

但是,您可以使用 HSTS 预加载选项来缓解这种情况。预加载您的网站意味着您向浏览器供应商注册您的域,他们将硬编码他们的浏览器以仅通过 HTTPS 访问您的网站。这意味着如果用户尝试通过 HTTP 访问您的网站,浏览器会将请求更改为 HTTPS。他们的用户在安全之前不需要先获取 HSTS 标头。他们将始终通过安全渠道与您联系。

现在,这并不能保护正在使用尚未更新其仅 HTTPS 网站列表的浏览器的用户。即使在使用预加载时,我也建议不要为少数使用旧浏览器或未更新浏览器的人关闭 HTTP。

但请注意,预加载是永久性的!摆脱预载列表非常困难。

要进入预加载列表:https ://hstspreload.org/

你不必。

一些较旧的浏览器和操作系统(这些通常并存)没有更新的证书根权限,但它们通常也不支持更新的 HTTPS 标准,因此不会丢失任何内容。

您的设备可能不支持 HTTPS、自定义脚本等。

没有人可以欺骗 HTTP,因为 DNS 记录属于您,而 A 记录指向您的特定 IP 地址(在完美世界中)。

你这样做只是为了保持兼容性,就是这样。