关于HSTS

本博客 hjy-xh,转载请申明出处

用途及用法

HSTS的作用是强制客户端(比如浏览器)使用HTTPS网络协议与服务器进行通信。也就是说如果一个网站使用该策略,浏览器必须拒绝所有的HTTP连接,并组织用户接受不安全的SSL证书。

启用的方法也很简单,服务器在响应头中添加Strict-Transport-Security字段即可:

1
Strict-Transport-Security: max-age=31536000; includeSubDomains

其中max-age的值表示在客户端收到这个请求后的31536000秒的时间凡是范文这个域名下的请求都要使用HTTPS协议。

工作细节

网站第一次通过HTTPS请求时,服务器响应Strict-Transport-Security头,浏览器记录下该信息,之后尝试访问这个网站的请求都会自动把HTTP替换成HTTPS。

HSTS设置的过期时间到了,后面通过HTTP的访问恢复到正常模式,不会再自动跳转到HTTPS

如果浏览器接收到使用HTTP加载资源的请求,则必须尝试使用HTTPS请求替代。如果HTTPS不可用,则必须终止连接。

此外,如果证书无效,将阻止用户建立连接。通常来说,如果HTTPS证书无效(比如过期、自签名、由未知CA签名等),浏览器会显示一个可以规避的警告。但如果使用了HSTS,浏览器就不会让你绕过警告。

不足

用户首次访问某网站是不受HSTS保护的。

因为首次访问时,浏览器还没收到HSTS,所以仍然有可能通过明文HTTP来访问。

解决这个不足目前有两种方案:

  • 浏览器预置HSTS域名列表,Google Chrome、Firefox、Internet Explorer和Microsoft Edge实现了这一方案

  • 将HSTS信息加入到域名系统记录中。但这需要保证DNS的安全性,也就是需要部署域名系统安全扩展

预加载 HSTS

谷歌维护着一个HSTS预加载服务,开启后,浏览器将会永不使用非安全的方式连接到你的域名

但这不是HSTS标准的一部分,也不该被当做正式的内容

参考

你所不知道的 HSTS

什么是HSTS,为什么要使用它?

HTTP Strict Transport Security

HTTP严格传输安全