HSTS

  • 2020-10-26
  • 浏览 (61)

HSTS 简介

HSTS的全称是 HTTP Strict Transport Security。HSTS 已经被主流的浏览器广泛采用, 简单来说支持 HSTS 的服务端,可以强制访问它的浏览器使用 HTTPS 协议。 这样就可以最大限度的减少 HTTP 协议的各种安全问题。

HSTS 好处

大家平时在使用浏览器的时候,一般是直接在地址栏里面输入域名,然后就访问了。但大多数浏览器在默认情况下会先用 HTTP 发起请求的。也就是说即便你的站点已经支持了 HTTPS,但如果不做任何处理的话,用户还是很难触及到。

而为什么我们平时访问很多网站的时候自动就跳转到 HTTPS 站点了呢,也是因为这些站点对这一点做了处理。 最原始的方法就是 302 跳转,服务端把所有的 HTTP 流量跳转到 HTTPS 上。 但这样做有一个明显的安全漏洞, 就是第一次访问站点的时候如果是 HTTP 就有可能被中间人劫持,很可能都没到 302 跳转的时候就被劫持了。

这也就是为什么要引入 HSTS 机制的原因了。 用户的浏览器一旦得到了 HSTS 的信息,下次再访问站点的时候客户端浏览器就会强制使用 HTTPS。 无论你在地址栏里输入什么,都会以 HTTPS 访问。 这样就避免了每次服务端跳转可能导致的潜在安全问题。

这样就解释了为什么我们使用主流浏览器输入网站域名的时候,都会自动跳转到 HTTPS 了。 因为我们访问的大多是主流的大网站,所以用户的感觉就是 HTTPS 自动发生了。但实际上并不是这样的。

HSTS 开启

# 在响应头增加
Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";

以上语句开启了 HSTS,各参数含义:

  • max-age:设置有效期,单位是秒
  • includeSubdomains:包括子域名(根据情况可删掉)
  • preload:预加载到浏览器缓存,即加入HSTS Preload List(根据情况可删掉,注意加入后需要向 hstspreload.org 提交申请)

加入HSTS Preload List

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

如何撤销HSTS Preload List

https://hstspreload.org/removal/
官方也提供了一个申请删除HSTS Preload List,不过需要注意的是撤销HSTS Preload List和加入HSTS Preload List一样,花费的时间可能需要几个月以上,所以申请HSTS Preload List前一定要谨慎。

加入HSTS Preload List注意事项

  • 由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。
  • 一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。也就是说开启HSTS后服务器上面的同一个根域名的所有子域名都要上Https,所以有的时候我们需要将子域名用来本地开发,每次都要配置HTTPS还是很麻烦的!而且同一个IP上网站域名都要上Https,如果你不部署也会给你强制跳转到https,导致无法打开,这真的是很麻烦。

HSTS 检测

开启了HSTS后,可以在 ssllabs 官网检测 HSTS 情况:

sslabs官网

总结

HTTPS 可以帮助用户保护自己的信息传输安全,合理使用 HSTS 可以让你的 HTTPS 站点触及更多的用户。有一点要注意的就是如果你的站点的 HTTPS 服务没有完全准备好,不要轻易的开启 HSTS 响应头。因为一旦浏览器得到这个响应头,就会在规定的 max-age 的时间段内强制使用 HTTPS 访问,如果你的服务没准备好,用户就会一直访问失败。

正文到此结束