Firefox 是如何详细实现 HSTS 的?

Posted

技术标签:

【中文标题】Firefox 是如何详细实现 HSTS 的?【英文标题】:How does Firefox implement HSTS in detail? 【发布时间】:2013-01-14 14:01:18 【问题描述】:

我正在详细研究 Firefox 和 Chrome 如何实现 HSTS(HTTP 严格传输安全)。

原来他们有一个预定义的列表,其中包含一些已经实施 HSTS 的网站。这可以在这里看到here 和/或here。 这些列表似乎以某种方式与源代码本身相关联,这在某种程度上是有意义的……但是 Firefox 和 Chrome 如何处理我自己的 HSTS 标头?他们如何以及在哪里存储我的 URL、我的最大年龄以及我是否包含子域? 我无法在 about:config 或类似的地方找到它......

所以也许有人比我更了解这个问题,我只是好奇(: 谢谢!

【问题讨论】:

【参考方案1】:

查看http://hg.mozilla.org/mozilla-central/file/20bbf73921f4/netwerk/protocol/http/nsHttpChannel.cpp#l1072,然后查看http://hg.mozilla.org/mozilla-central/file/20bbf73921f4/security/manager/boot/src/nsStrictTransportSecurityService.cpp#l249,后者调用http://hg.mozilla.org/mozilla-central/file/20bbf73921f4/security/manager/boot/src/nsStrictTransportSecurityService.cpp#l147

所以数据最终存储在权限管理器中,这是每个主机信息存储在 Firefox 中的正常位置。我认为权限管理器将其状态存储在permissions.sqlite

【讨论】:

【参考方案2】:

希望强制执行 HTTP Strict Transport Security (HSTS) 的站点会发送一个标头作为响应 - Strict-Transport-Security: max-age=31536000 最大年龄是它到期的时间。它在每次请求时发送,因此每次请求时它都会更新到更多的时间。

浏览器(我只尝试过 Firefox)与它一起存储这些数据,并在每次访问该站点时使用它。即使对于隐身模式也是如此。如果您之前曾以非隐身模式访问过该网站,那么即使您现在尝试以隐身模式打开该网站,该网站的详细信息也会被保存并使用。

对于 Firefox,此数据存储在一个名为 SiteSecurityServiceState.txt 的文件中,该文件位于您的 Firefox 配置文件文件夹中。您可以在浏览器中输入about:support,然后选择“在文件夹中显示”以打开您的个人资料文件夹,您可以在其中找到该文件。

我不确定预定义的站点,但上面是为 firefox 更新正常站点 HSTS 详细信息的文件。

更多详情 - Understanding HTTP Strict Transport Security (HSTS)

PS:以上链接指向我的个人博客,其中包含有关 HSTS 的更多详细信息。

【讨论】:

以上是关于Firefox 是如何详细实现 HSTS 的?的主要内容,如果未能解决你的问题,请参考以下文章

怎么关掉HSTS

Firefox火狐浏览器的高效使用

Chrome:网站使用 HSTS。网络错误...此页面可能稍后才能使用

如何查找网站是不是使用 HSTS

Firefox使用与特色插件

如何使用 JMeter 记录处理严格传输安全 (HSTS)