2017年07月02日
什么是 HSTS ?
借用维基百科的介绍,HTTP Strict Transport Security
翻译为 HTTP 严格传输安全,网站部署该策略后,浏览器会强制启用 HTTPS , 以降低被劫持的风险.
日常中被攻击的场景?
- 某些无节操的网络服务商会劫持购物网站,参与返利,甚至直接将返利网站的链接替换为自己的账号,形同强盗.
- 某些网站明明没有展示广告,访客却一直反应有恶俗广告飘动.
有哪些类似技术?
大家为了解决中间人攻击,提出了各种方案:
- HPKP(公钥钉扎),网站服务器提供一个包含证书公钥哈希的列表,浏览器在后续通信中仅信任列表中的证书.百度最近在强推此技术,罔顾中小网站尚未理解利弊的实际情况,ORZ.
- Certificate Transparency(证书透明化),签发证书的 CA 将其签发的证书记录到可公开认证、只能附加内容且不可篡改的日志中.这个与前一种技术目标类似,而前景更好,推荐使用.
有什么缺陷?
可能很多同学都注意到:访客首次访问很可能是从 HTTP 重定向到 HTTPS 的,还可能被劫持.所以浏览器厂商直接内置了个 HSTS preload list ,列表中的域名首次访问就启用 HTTPS .另外需要注意关闭可能影响访客数月之久.
部署的前置条件?
- 有个合法的证书,如果还没购买,不妨试试免费好用的Let’s Encrypt.
- 将所有 HTTP 流量重定向到 HTTPS .
- 所有子域名都要启用 HTTPS .
- 网页服务器输出
HSTS header
,包含以下内容:max-age
需要大于10886400
秒,必须定义includeSubDomains
和preload
参数. - 如果使用额外的重定向,也应包含
HSTS header
.
部署可利用的工具?
- 官方文档,RFC 6797.
- SSL LABS 出品的 SSL 测试工具,可用来检查你的 SSL 设置情况和获取部署 HSTS 必须的公钥哈希.
- 申请加入 HSTS preload list .需要等待较长时间.
- 使用 Chrome 自带的
chrome://net-internals/#hsts
检查生效情况.
如何禁用 HSTS ?
最好别这么干,如果没想清楚,暂时就别启用.关闭很繁琐.具体参考文档.