将域名加入 HSTS Preload List

什么是 HSTS

大家可以参考我之前写的博文,里面有对 HSTS 的简介

Chrome 通过 HSTS 强制使用 HTTPS

RFC 6797

一点小小的不足

以我的网站为例,我来讲讲不足的地方。

假设一个用户从来没有访问过我的网站,并且他第一次访问的时候访问的是 http://imlonghao.com ,在正常的情况下,我的服务器就会给这位用户返回一个 301 跳转到 https://imlonghao.com ,并且带上 HSTS 头

在用户下次访问我的博客时,只要 HSTS 还在有效期中,浏览器就会直接响应一个 HTTP 307 头,并跳转到相对应的 https 页面,并且这是不需要经过数据传输的,直接在本地浏览器进行的处理

这似乎没什么问题,对吧。

但是,当他第一次访问的时候就可能有问题了,由于是 http 协议进行的数据传输,因此这里就可能被别人进行链路挟持了,他就可以改掉你的 HSTS 规则,然后给你直接挟持到他们指定的网站上去,那么用户可能就无法正常访问到我的博客了。

于是乎,HSTS Preload List 似乎就是一种机制来解决这个问题

HSTS Preload List

简介

(我就直接翻译官方的原话吧)

HSTS Preload List 是一个站点的列表,他将会被通过硬编码写入 Chrome 浏览器中,列表中的站点将会默认使用 HTTPS 进行访问,此外,Firefox 、Safari 、IE 11 和 Edge 也同样一份 HSTS 站点列表,其中包括了 Chrome 的列表

申请要求

Expiry must be at least eighteen weeks (10886400 seconds). The includeSubdomains token must be specified. The preload token must be specified. If you are serving an additional redirect from your HTTPS site, that redirect must still have the HSTS header (not the page it redirects to).

一个例子:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

开始申请

很简单,我们需要打开这个页面,HSTS Preload Submission

然后输入你的域名按 ENTER

然后就会提示你你的域名已经在等待审核了,预计有几个星期甚至是一个多月才可以审核通过

查看结果

如果你的域名已经通过审核的话,页面会是这样的

而且这个时候在 chromium 的源代码中是可以找的到你的域名的了

参考这个,https://code.google.com/p/chromium/codesearch#chromium/src/net/http/transport_security_state_static.json

一点好玩的想法

如果我的域名在这个列表里面,并且大多数浏览器都已经更新到新的列表,那么我就可以去用国内的 VPS 之类的,不打开 80 端口,只打开 443 ,浏览器同样会跳转过来,这样就可以免备案了~

不过似乎这样对搜索引擎不太友好~

:)


Update in 2016.1.10 23:50

本站已经成功加入 HSTS Preload List ,预计几个月之后就可以进 stable 了!

并且,十分幸运的是,和一个我挺喜欢的博客 (imququ.com) 并排

#chromium/src/net/http/transport_security_state_static.json&q=imlonghao.com&sq=package:chromium&type=cs&l=5201