本博客 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标准
的一部分,也不该被当做正式的内容