精华 解决缺陷,让HSTS变得完美
发布于 9 年前 作者 ye123456 6121 次浏览 最后一次编辑是 8 年前 来自 分享

作者:王继波 野狗科技运维总监,曾在360、TP-Link从事网络运维相关工作,在网站性能优化、网络协议研究上经验丰富。 野狗官博:https://blog.wilddog.com/ 野狗官网:https://www.wilddog.com/ 公众订阅号:wilddogbaas

1918961723-56de4ed8f1f95_articlex.png

HSTS是HTTPS性能和安全优化中最重要的一环,能够给HTTPS带来巨大好处,但也存在一个小缺陷。本篇文章会介绍HSTS的工作原理及如何通过HSTS preload list解决HSTS的小缺陷。

HSTS是什么?

HSTS是HTTP Strict Transport Security的缩写,即:“HTTP严格传输安全”。在介绍HSTS之前,我们先来看HTTPS最典型的用户访问过程:通常我们访问一个网站时,只在浏览器中输入网站地址,而不输入协议名。比如访问野狗的官网,我们最常使用www.wilddog.com,即使该网站是全站HTTPS,我们也很少使用https://www.wilddog.com这样的方式。 HTTPS网站的做法是对用户的HTTP访问做302跳转到HTTPS,并重新建连。

3200416710-56de4f1ff40d6_articlex.png

但是这个过程明显存在两个不足之处:

整个通信过程中的前两个RT是没有意义的; 使用了不安全的HTTP通信,万一你是在提交敏感数据呢。 HSTS的出现就是解决这些问题的。HSTS的作用除了节省HTTPS通信RT和强制使用HTTPS,还包括:

阻止基于SSLStrip的中间人攻击; 万一证书有错误,则显示错误,用户不能回避警告。 HSTS的具体工作机制可描述如下:服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程。

目前大部分浏览器对HSTS的支持已经相当完美,具体各浏览器和版本的支持情况可以在http://caniuse.com/#search=HSTS上查看。 但是HSTS是有缺陷的,第一次访问网站的客户端,HSTS并不工作。 要解决这个问题,就要了解我们下面要讲解的HSTS preload list。

HSTS preload list

HSTS preload list是什么? HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。

如何加入HSTS preload list? 加入HSTS preload list不但不麻烦,而且Chrome也鼓励HTTPS网站能够主动加入。申请的方法和需要满足的条件在https://hstspreload.appspot.com网站上都有具体说明。

我将加入HSTS preload list的条件摘录如下:

有效的证书(如果使用SHA-1证书,必须是2016年前就会过期的); 将所有HTTP流量重定向到HTTPS; 确保所有子域名启用HTTPS,特别是www子域名 同时输出的HSTS响应头部需要满足以下条件:

max-age至少需要18周,10886400秒 必须指定includeSubdomains参数 必须支持preload参数 所以,一个典型满足HSTS preload list的响应头部为:add_header Strict-Transport-Security “max-age=31536000; includeSubDomains;preload”;

从申请到审核通过,时间在几天到几周不等。野狗的域名wilddog.com申请总共耗时3天。 申请后,你可以在https://hstspreload.appspot.com网站中查询最新的状态, 也可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。下图是对wilddog.com域名查询的输出结果。

3862581827-56de500031f64_articlex.png 4066074800-56de50098a7b8_articlex.png

值得一提的是,从审核通过到正式加入到Chrome的stable release版本中还需要一段时间,因为要经过canary、dev、beta以及stable progression。

3 回复

值得一提的是,从审核通过到正式加入到Chrome的stable release版本中还需要一段时间,因为要经过canary、dev、beta以及stable progression。

问一下,这个列表会被内置到chrome中吗?

回到顶部