【问题标题】:How do I validate HSTS is being enforced by the browser如何验证浏览器是否强制执行 HSTS
【发布时间】:2018-08-01 03:32:46
【问题描述】:

我在我的网站上设置了 HSTS 标头,我想测试不同的浏览器(chrome、Firefox、IE、Opera)是否强制标头。

我设置了一个受信任的证书,连接到该站点,我可以在 HTTP 响应中看到标头。但我想验证浏览器确实执行了协议。

在 Chrome 中,这很简单,而且很有效: - 我可以在 chrome://net-internals/#hsts 查询网站 - 尝试连接 HTTP 时,我得到 0kb 响应,状态为 307。 - 如果我改回自签名证书,我将无法连接网站并且没有继续选项。

其他浏览器的行为不同,我无法查询 HSTS 列表,响应状态和大小不同,当更改为自签名证书时(在第一次受信任的连接后)我确实有继续选项。

那么我如何验证协议是否在每个浏览器上执行?

【问题讨论】:

    标签: google-chrome internet-explorer firefox opera hsts


    【解决方案1】:

    虽然 Chrome 查询 HSTS 缓存并查看虚假 307 重定向的功能很方便,但您只需检查 HSTS 是否被强制执行。

    HSTS 为您提供两种选择:

    1. 通过 HTTPS 自动加载 HTTP 资源
    2. 防止点击通过证书错误。

    您专注于第二个选项,但为什么不使用第一个选项作为测试呢?只需使用 HTTP 加载站点并检查它是否被重定向(即加载 HTTP URL,因此未使用 HSTS 规则)或者它是否立即加载 HTTPS URL(即使用 HSTS)。

    因此,例如在 Firefox 中打开网络工具,点击“Persist logs”选项(让我们执行“Disable Cache”以避免任何混淆)。然后通过 HTTP 访问具有 HSTS 标头的站点(例如 http://stackoverflow.com),如果这是您第一次访问,您将看到 301 重定向:

    下次您访问它时(在它缓存了 HSTS 标头之后)它应该直接访问 HTTPS URL,即使您在地址 bat 中键入了 HTTP URL:

    如果您已经访问过 stackoverflow.com,那么您可以clear the HSTS cache 再试一次。

    确认是否使用了 HSTS 后,您可以调查点击问题。浏览器不应在 HSTS 到位时允许点击,包括自签名证书,但可能存在错误,或者它仍然在某些地方缓存您的旧证书,或者 HSTS 政策已过期或别的...

    【讨论】:

    • 我也看了HTTP头,问题是如何区分301\302\307响应状态是来自服务器还是浏览器?对于 chrome,标题大小为 0KB,与其他浏览器不一样。我正在使用多个服务器和浏览器对此进行测试,有时我会得到不同的行为。现在,在我与受信任的证书连接并替换为自签名证书或删除我添加的 CA 之后,我仍然可以“继续”到该站点(使用 IE),之前它还可以并阻止了我(是的我看到证书更改已被浏览器识别)
    • 301 和 302 来自服务器(虽然可以缓存)。 307来自浏览器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多