HSTS 是什么
HSTS 是什么
Google 的 .dev 域名面向公众开放,于是我去 Gandi 上看了下,注意到
域名申请条件
.dev 域名已由 Google 纳入 HSTS 列表中,因此要求此域名的所有网站都必须加密,这表示所有网站都必须使用 HTTPS。

那么 HSTS 是什么呢?
HTTP Strict Transport Security
(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP。https://developer.mozilla.org/zh-CN/docs/Security/HTTP_Strict_Transport_Security
这一机制可以在 HTTP 301 跳转到 HTTPS 之前先一步规避中间人攻击的风险。想想看,访问 http://example.com 的过程中是没有加密的,如果在这一阶段就搞事情的话 …
HSTS 是怎么工作的?
当通过 HTTPS 访问你的站点的时候,你的服务器返回的时候加一个 Header,Strict-Transport-Security
,主要值是 max-age=xxx。在设定好的时间内,所有对于当前域名的 HTTP 请求都自动转 HTTPS。
细节可以看下 HTTP Strict Transport Security - 安全 | MDN
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload
那,这和 .dev .app .page 等等域名有什么关系,前面说的 HSTS 列表又是什么?
HSTS 列表是什么?
谷歌维护着一个 HSTS 预加载服务。按照如下指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接到你的域名。虽然该服务是由谷歌提供的,但所有浏览器都有使用这份列表的意向(或者已经在用了)。但是,这不是 HSTS 标准的一部分,也不该被当作正式的内容。
- Chrome & Chromium 的 HSTS 预加载列表: https://www.chromium.org/hsts
- Firefox 的 HSTS 预加载列表:nsSTSPreloadList.inc
另外我们可以通过 https://hstspreload.org/ 来查询相关的域名是否在列表里,比如大家喜闻乐见的 example.com

而 hstspreload.org 显然是在这个列表里的

在 <hstspreload.org> 查询 .dev 可以看到整个 .dev 都是在列表里的,而查询 .com .org 等普通的域名则会告诉你不要使用一个 . 开头的域名


怎么提交域名到 HSTS 预加载列表
还是 https://hstspreload.org/,有说明如何提交域名到 Chrome 的 HSTS Preload List
服务端需要配置 SSL 证书,将 HTTP 请求重定向到 HTTPS,提供 HSTS Header,并且 max-age 足够长,然后申请就就可以了。