我正在设置一个新的网络服务器。除了 TLS/HTTPS,我还在考虑实施Strict-Transport-Security和其他 HTTPS 强制机制。
这些似乎都是基于我在服务http://www.example.com
之外的假设https://www.example.com
。为什么我不只提供 HTTPS?也就是说,是否有基于安全的理由来提供 HTTP 服务——例如,http://www.example.com
如果我不设置 HSTS,有人会欺骗吗?
我正在设置一个新的网络服务器。除了 TLS/HTTPS,我还在考虑实施Strict-Transport-Security和其他 HTTPS 强制机制。
这些似乎都是基于我在服务http://www.example.com
之外的假设https://www.example.com
。为什么我不只提供 HTTPS?也就是说,是否有基于安全的理由来提供 HTTP 服务——例如,http://www.example.com
如果我不设置 HSTS,有人会欺骗吗?
出于可用性原因,您需要提供从所有 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 地址(在完美世界中)。
你这样做只是为了保持兼容性,就是这样。