解决缺陷,让HSTS变得完美

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

图片描述

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,并从新建连。安全

图片 1

可是这个过程明显存在两个不足之处:性能优化

  • 整个通讯过程当中的前两个RT是没有意义的;服务器

  • 使用了不安全的HTTP通讯,万一你是在提交敏感数据呢。网络

HSTS的出现就是解决这些问题的。HSTS的做用除了节省HTTPS通讯RT和强制使用HTTPS,还包括:app

  • 阻止基于SSLStrip的中间人攻击;运维

  • 万一证书有错误,则显示错误,用户不能回避警告。dom

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域名查询的输出结果。

图片描述
图片描述

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

相关文章
相关标签/搜索