[Other] HSTS

作者: 何幻 | 来源:发表于2017-09-21 18:01 被阅读19次

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

相关文章

网友评论

    本文标题:[Other] HSTS

    本文链接:https://www.haomeiwen.com/subject/eurtextx.html