忽略浏览器中的 HSTS 预加载

忽略浏览器中的 HSTS 预加载

Google Chrome(和其他浏览器)通过使用 HSTS 预加载,可以很好地阻止用户查看非 TLS 网站或证书无效的网站。实际上,它是如此的好,以至于我根本找不到在 Google Chrome 中打开该网站的方法。

chrome://net-internals/#hsts允许您暂时删除域的 HSTS,但前提是该域未预加载。

作为一名管理员和安全人员,我有时必须通过 http 查看网站,即使它们使用了 HSTS 预加载。最好的方法是什么?我主要使用 Chrome,但也希望了解 Firefox、Edge 和 Safari 的说明。

答案1

最好的选择是使用浏览器以外的 HTTP 客户端(例如curl),或者使用拦截代理(例如 Fiddler、Burp Suite 等)。只有浏览器才会强制执行 HSTS(至少默认情况下)。您几乎肯定也可以在浏览器中的某个地方找到预加载列表 - 它基本上必须是一个文件,可能是您可以只grep/ findstr.exefor 的文件 - 然后编辑掉相关域(尽管它可能会在下一次浏览器更新时恢复)。

这些选项的更多细分:

  • 如果您只想查看对简单请求的响应,或者甚至是您不需要手动进行大量修改的复杂请求的响应,那么非浏览器 HTTP 客户端确实非常方便。它们会让您以机器可读的方式查看响应(如果您请求它们,则包括正文和标头),从而大大简化了脚本编写(我假设您希望这样做是为了持续测试网站是否正确地执行了重定向到 HTTPS 等操作,因此我认为自动化是可取的)。有很多工具,尽管它们都有语法差异;一些最常见的工具是curlwget(其中至少一个应该存在于任何非玩具 *nix 系统上)或 Powershell 的Invoke-WebRequest。例如,在 Windows 上,(Invoke-WebRequest http://bing.com/ -MaximumRed 0 -ErrorAct Silent).RawContent将向 HSTS 预加载的域发出 HTTP(非 HTTPS)请求并向您显示完整的 HTTP 响应。如果您只想要标题,您可以使用.Headers而不是.RawContent,这将为您提供格式化的名称-值列表。其他客户端的语法各不相同,但它们都应该具有可比的功能。如果您更喜欢 GUI 工具,还有 Postman 等选项。
  • 拦截代理是您在本地安装的软件,然后将浏览器配置为代理服务器;这允许您读取和修改出站请求及其入站响应。为了使 HTTPS 拦截工作,代理软件会生成一个唯一的 TLS 根证书(您必须在操作系统/浏览器中将其安装为受信任的证书),然后使用相应的私钥(也是每次安装时唯一生成的)为您的浏览器通过 HTTPS 请求的每个站点签署证书。在大多数情况下,这都是有效的,您将看到被拦截的 HTTPS 流量,解密为 HTTP;然后您可以选择转发响应作为HTTP 而不是 HTTPS,这样您就可以看到服务器对不安全的 HTTP 请求的响应。但是,请注意,如果有任何浏览器只会在 HTTPS 请求中发送的数据(例如设置了标志的 cookie Secure),这些数据仍然会存在,因为浏览器知道您正在发出 HTTPS 请求(事实上,浏览器和代理之间的连接是安全的,只是从代理到网络服务器的连接不安全)。不过,浏览器可能不信任自定义添加的根证书来为 HSTS 站点签署证书;如果发生这种情况,您可能需要在错误页面中输入“thisisunsafe”或类似的字符串(没有文本框,只需输入即可);请参阅如何在 Chrome 上忽略 HSTS?了解更多信息。最后,一些网站可能会被“固定”,这样它们就不会接受不熟悉的证书(或者至少是不熟悉的公钥或证书颁发机构);这种情况非常罕见,可能与第三方网站无关,因为没有现代浏览器支持任意网站进行固定,只有浏览器制造商才能创建此类固定。
  • 我从未尝试过手动编辑 HSTS 预加载列表,但应该是可以的。HSTS 预加载列表现在很长,甚至占据了浏览器安装空间的很大一部分,可以在网上找到https://raw.githubusercontent.com/chromium/chromium/master/net/http/transport_security_state_static.json警告:16.6 MB 文件!)。它应该存在 - 很可能以该名称命名,并且可能至少在类似的路径下 - 在您的 Chrome 安装目录中的某个位置。如果是这样,您应该能够打开并编辑该文件以从您的系统中删除有问题的预加载;它是完全可读的 JSON。

答案2

如果您是希望通过 HTTP 浏览的网站的管理员,那么降低max-ageStrict-Transport-Security 标头中的值可能会有所帮助。该属性定义了 HSTS 在浏览器中的有效时间。

Nginx 示例:

add_header Strict-Transport-Security "max-age=1800;";

答案3

在 Chrome(我想还有基于 Edge/Chrome 的浏览器)中,thisisunsafe当出现 HSTS 警告时,您只需在键盘上键入即可。这将跳过浏览会话的警告并重新加载网站。

相关内容