1. 背景
HSTS是HTTP Strict Transport Security的缩写,是一个安全功能,
它告诉浏览器只能通过HTTPS访问当前资源,禁止HTTP方式。
如果一个网站接收HTTP请求,由服务器自动跳转到HTTPS,
那么在用户开始跳转之前,是通过没有加密的HTTP方式和服务器对话的。
于是就会有被中间人攻击的潜在威胁,跳转过程中,用户信息可能会被劫持。
如果服务器通过HTTP Strict Transport Security响应头通知浏览器,
声明该网站禁止使用HTTP方式加载,
浏览器就会自动把所有尝试使用HTTP的请求,自动替换为HTTPS请求。
2. 服务器启用HSTS的方式
开启HSTS,只需要让HTTPS请求,返回Strict-Transport-Security
响应头:
Strict-Transport-Security: max-age=expireTime [; includeSubdomains]
参数解释:
(1)expireTime
过期时间,单位秒,浏览器需要记住这个网站只能通过HTTPS访问的时间。
(2)includeSubdomains
可选
如果这个可选的参数定义了,这条规则对于网站的所有子域同样生效。
如果Strict-Transport-Security
响应头,通过HTTP请求传递,则会被浏览器忽略。
这是因为攻击者可能拦截或者篡改HTTP响应头。
3. 浏览器保存HSTS
你的网站第一次通过HTTPS请求,服务器响应了Strict-Transport-Security
头,
浏览器就会记录下这些信息,后面尝试访问这个网站的请求都会自动将HTTP替换为HTTPS。
当HSTS头设置的过期时间到了,后面的HTTP访问就会恢复到正常模式,不再自动跳转到HTTPS。
每次浏览器接收到Strict-Transport-Security
响应头,
它都会更新这个网站的过期时间,
所以网站可以刷新这些信息,防止过期发生。
4. Chrome浏览器删除HSTS
如果网站本来支持HTTPS,并向浏览器返回了Strict-Transport-Security
响应头,
而后,在HSTS过期时间之内,关闭了HTTPS服务,
对该网站的HTTP请求也会失败,这时候需要删除浏览器中的HSTS记录。
Chrome浏览器提供了以下页面,对HSTS进行配置,
chrome://net-internals/#hsts
用户可以在Delete domain
区域,输入网站域名,然后将其从浏览器的HSTS列表中删除。
这样对该域名的HTTP请求就不会由浏览器自动替换为HTTPS了。
参考
HTTP严格传输安全
Strict-Transport-Security
HTTP Strict Transport Security
网友评论