jwenjian/ghiblog

HSTS

jwenjian opened this issue · 0 comments

前几天用谷歌浏览器访问一个网站, 浏览器提示您的连接不是私密连接, 原因是网站的证书过期了.

本想着要忽略掉这个错误继续访问的, 结果点击高级按钮之后, 并没有一个仍然访问的链接可以点击, 于是花了点时间研究了一下提示信息, 见下图

👇👇👇

image

图中最后一段话提到了您目前无法访问...... 因为此网站使用了HSTS.

那么HSTS是个啥❓ , 为什么使用了之后只要证书过期就无法访问❓

带着这个问题, 我跑到图书馆借了一本关于HTTPS的专业书Google了一下, 终于找到了答案.

🎉🎉🎉

HSTS, 全称: HTTP Strict Transport Security, 是国际互联网工程组织IETF正在推行一种新的Web安全协议, 它的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。

采用HSTS协议的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在URL地址栏中输入加密地址。

该协议将帮助网站采用全局加密,用户看到的就是该网站的安全版本。

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

非加密传输时设置的HSTS字段无效!!!

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

  1. 在接下来的一年(即31536000秒)中,浏览器只要向xxx或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入 http://xxx/ ,浏览器应当自动将 http 转写成 https,然后直接向 https://xxx/ 发送请求。
  2. 在接下来的一年中,如果 xxx 服务器发送的TLS证书无效(如证书过期/证书中域名与实际访问域名不匹配等),用户不能忽略浏览器警告继续访问网站。

同时为了防止用户首次安装浏览器或者手动清除了本地关于HSTS网站的状态导致的安全问题, Chrome同时维护了一个叫做HSTS Preload List的网站列表, 访问这个列表中的网站默认使用HSTS规则, 如:

  • Google
  • Paypal
  • Twitter
  • Simple
  • Linode
  • Stripe
  • Lastpass

如果你自己的网站也开启了HSTS的支持并且希望将自己的网站放入这个列表中, 可以在这里提交申请.

HSTS目前已经被主流浏览器(Chrome, Firefox, Safari, Opera, Edge, IE)支持, 如果你的网站是HTTPS的, 不妨试着开启HSTS的支持, 强制客户端与服务器使用https协议进行数据的交换来提高安全性.

参考链接: