什么是HSTS
HSTS(“HTTP Strict Transport Security” HTTP严格安全传输)是一种响应头,像这样
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload;
他可以防止你的网站在第一次http请求中被劫持,导致无法正常访问。
本来我想图方便,直接让七牛将HSTS部署在他的边缘节点上,然后去面板里逛了一圈,发现这面板里没有这个设置,甚至连tls允许版本都没有,明明隔壁又拍云都有(小声bb)。
没办法,联系客服也只能做到开HSTS,而且怎么整都只有30天
于是,只能自己动手了
这里我们主要说Nginx的配置,只需要给nginx添加一行headers规则就好了
在nginx.conf末尾添加
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
max-age代表缓存HSTS头的时间,这里是一年(以秒为单位)
includeSubdomains代表为子域名开启HSTS
preload代表预加载到浏览器缓存
申请Preload List
有HSTS头已经能很大程度上的避免被劫持,但是缺点是需要正常访问一次才能缓存HSTS头,如何做到不需要访问一次,让浏览器自动强制使用HTTPS呢?
当然,是有的,Preload list是一个由 Google Chrome 维护,Chrome、Firefox、Safari、IE 11 和 Microsoft Edge 都在遵从的HSTS域名列表
如果要想把自己的域名加进这个列表,首先需要满足以下条件:
拥有合法的证书(如果使用 SHA-1 证书,过期时间必须早于 2016 年);
将所有 HTTP 流量重定向到 HTTPS;
确保所有子域名都启用了 HTTPS;
输出 HSTS 响应头:
max-age 不能低于 18 周(10886400 秒);
必须指定 includeSubdomains 参数;
必须指定 preload 参数;
如果全部都已经完成了的话,就可以去HSTS Preload List申请,但是周期可能会很长,因为是人工审核,目前本站也在申请中,成功了的话我会回来更新文章,写写经验