分类
运维教程

开启HSTS后的坑

首先说下HSTS是什么。HSTS是国际互联网工程组织IETE正在推行一种新的Web安全协议HTTP Strict Transport Security。采用HSTS协议的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在地址栏中输入加密地址。该协议将帮助网站采用全局加密,用户看到的就是该网站安全版本。

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建安全的连接。服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security的字段。非加密传输时设置的HSTS字段无效。

比如,https://birdteam.net的响应头含有Strict-Transport-Security:max-age=31536000;includeSubDomains。这意味着两点:

接下来的一年(即31536000秒)浏览器只要向birdteam.net或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入http://birdteam.net,浏览器应自动将http转写成https,然后直接向https://birdteam.net/发送请求。

在接下来的一年中,如果birdteam.net服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问该网站。

简单来说,就是你开启HSTS,就意味着以后只能通过安全连接,访问所有*.birdteam.net的网站,否则无法访问。

而我只有主站开启了https,其它子站都是非https链接,所以不得不关闭此功能。

那如何关闭呢?

这是个坑,为什么这么说?

因为设置max-age=31536000时,其数值为缓存秒数,简单来说到了这个时间,才会解除限制,刚说了需要一整年,那么一整年的时间,网站都要使用安全链接才行。

有没有办法解除呢?还是有的,重新修改限制时间,改成1秒即可。

不过有个缺点,就是改完之后需要保留一段时间,确保访问过你网站的人,都重新读取了缓存时间,不然还要等上一年。

这是坑啊!