[Server Setup] 4-0. 理解HSTS和HSTS Preload

现在我们的网站已经开启了HTTPS支持并会自动将HTTP请求重定向到HTTPS,但是如果攻击者将HTTPS头强行换为HTTP,那么HTTPS的保密作用便失效了。

人们通过启用HSTS来避免这种风险。当浏览器第一次与网页服务器连接时,网页服务器会发送一个含有Strict-Transport-Security字段的HTTP数据包。一旦浏览器收到并成功解析(老版本的浏览器可能不支持此协议)该数据包,接下来的一段时间内(根据Strict-Transport-Security中规定的时间),浏览器都将直接访问HTTPS网址。

但这依然有点问题:如果攻击者第一次就将HTTPS转为HTTP并过滤了这一字段,那么这种保护机制就失效了。好在,有HSTS Preload。

什么是 HSTS Preload?

当一个网站启用HSTS Preload时,该网站会进入一个由谷歌维护的列表(HSTS Preload List)。

大部分现代的浏览器(包括)会内置此列表并在浏览器更新时更新此表,当浏览器发现要访问的网址正好在内置的列表中时,浏览器会自动跳转至HTTPS并加入HSTS报头,保证了访问安全性。

一般情况下,进入和退出HSTS Preload List都会耗费较长时间,所以申请加入之前要三思。

申请加入HSTS Preload List需要什么条件?

根据申请网站,加入该List需要:

  1. 一张有效的证书
  2. 将HTTP请求重定向至HTTPS(如果监听了80端口的话)
  3. 所有的子域名都使用HTTPS
    • 尤其是www子域名必须使用HTTPS(如果DNS解析记录存在的话)
  4. 在HTTPS请求的基础上,存在HSTS报头
    • max-age 值至少为八周(10886400秒)
    • includeSubDomains 值必须存在
    • preload 值必须存在
    • 如果有额外的域名指向你的域名,那个域名必须也有HSTS报头(而不是它指向的域名)

有点复杂?没关系,在下一篇Blog中我们会讨论如何配置以达到以上需求。

额外的优点

许多宽带运营商(家用&…)会封堵80端口。如果域名加入了HSTS Preload List,浏览器会直接使用443端口连接(HTTPS),从而可以直接连上而不用手动添加在域名前加入https://

暂时先讲到这里,下一篇博文我们将讨论如何加入。

参考资料:

点赞
  1. clx-miroir说道:

    运营商有时候并不让你连到网站服务器...而是他们做的类似镜像一样的来dns劫持...顺便加点奇葩数据包,比较好的是抽奖,其实我还见过色情广告......

发表评论

电子邮件地址不会被公开。 必填项已用*标注