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 的?的主要内容,如果未能解决你的问题,请参考以下文章