不早了,快休息吧?

默认分类

你的网站加入 HSTS preload 预加载列表了吗

2024年01月10日 16:56:36 · 本文共 2,074 字阅读时间约 7分钟 · 408 次浏览
你的网站加入 HSTS preload 预加载列表了吗

目前在 Google Chrome 浏览器强推 HTTPS 以后,现在几乎大部分网站都已经是 HTTPS 协议访问了,你是否听说过 HSTS(HTTP Strict Transport Security) HTTP严格传输安全?让你的网站更安全,加载更快速。

前提

你的网站必须支持 HTTPS 协议访问,并且所有子域名都支持 HTTPS 协议访问,如果任何一个子域名不支持 HTTPS 协议,那么就不用往下看了,这篇博文内容不适合你的情况。

HSTS

HSTS(HTTP Strict Transport Security) 是HTTP严格传输安全的意思,是由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用 HSTS 策略,来让浏览器强制使用 HTTPS 与网站进行通信,以减少会话劫持风险。

当你的网站使用 HSTS 策略以后,浏览器将放弃 HTTP 明文请求,直接强制用户使用 HTTPS 进行安全加密访问,这样运营商或网络中间者就无法对你的网站进行劫持。

要开启 HSTS 策略,你只需要在 HTTPS 的响应头中增加一个 Strict-Transport-Security 头,有以下三种写法:

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

其中 max-age 是 HSTS 策略存活时间,比如设置 31536000 就是告诉浏览器在接下来 31536000 秒之内可以强制用户使用 HTTPS 协议来访问网站;includeSubDomains 的意思是包含子域名,如果你加上了 includeSubDomains 就是告诉浏览器这个域名的子域名也是同样可以强制用户使用 HTTPS 协议来访问网站;preload 的意思是允许预加载,如果你加上 preload 就是告诉浏览器可以被纳入预加载列表中,这也是本篇博文要说的重点。

有关 HSTS 的更多详细信息,请参阅:RFC 6797

预加载列表

上一段落中我提到了 preload 预加载,并且在博文开头说了可以让网站加载更快,这都得益于 HSTS preload 预加载列表。

我们知道包括 Google Chrome 浏览器在内很多浏览器的内核都是 Chromium 这个开源项目的内核,而这个开源项目就维护了一个列表,这个列表位于 Chromium 代码之中!

可以在chromium的源码中查询到:https://source.chromium.org/chromium/chromium/src/+/main:net/http/transport_security_state_static.json?q=renfei.net&ss=chromium

一旦你的网址进入 HSTS preload 预加载列表,也就是在 Chromium 代码之中增加了你的网站名单,无论用户是否访问过你的网站,浏览器都会强制使用 HTTPS 协议访问你的网站。

这也是为什么说可以加速你的网站访问,因为少去了一步 HTTP 重定向到 HTTPS 这一步,直接就是强制 HTTPS 访问,无需和网站提前有任何交互。

如果你想查询一个域名是否已经在浏览器中内置可以打开 Chrome 的设置页面:chrome://net-internals/#hsts,在 Query HSTS/PKP domain 这里进行查询。

加入 HSTS preload 预加载列表的意义

我为什么要加入 HSTS preload 预加载列表?

首先,我的网站已经完全全部支持 HTTPS 协议访问了,所以可以省去 HTTP 重定向到 HTTPS 这一步,增加访问速度。

其次,是有效防止会话劫持风险,目前无论是运营商还是中间人,都无法劫持 HTTPS 的内容,但他们可以在第一步 HTTP 重定向到 HTTPS 这一步进行劫持,但如果你加入了 HSTS preload 预加载列表,浏览器就不会尝试使用 HTTP 去请求,而是强制使用 HTTPS。

防止 NTP 攻击

目前,HSTS 是一种相当强大的强制 HTTPS 连接的方式。危害 HSTS 的唯一实用方法是基于对网络时间协议 (NTP) 的攻击,该攻击试图通过伪造 NTP 服务器的时间值来操纵系统时间。这使得攻击者可以欺骗浏览器使 HSTS 条目过期并允许不安全的 HTTP 连接。加入 HSTS preload 预加载列表以后将有效防止这种情况。

加入 HSTS preload 预加载列表

  1. 首先,你的一级域名要能够从 HTTP 重定向到 HTTPS
  2. 然后,使用 HTTPS 访问一级域名时,增加相应头:Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  3. 注意,max-age 必须至少为 31536000秒(1年);includeSubDomains 必须存在;preload 必须存在
  4. 设置好响应头以后,到:https://hstspreload.org 进行检查,如果没有问题,会看到 Submit 提交表单,提交申请即可
  5. 等待下周 Chromium 的更新,你的域名将随着源代码进入 HSTS preload 预加载列表
加入 HSTS preload 预加载列表

HSTS preload 预加载列表的危险

如果你加入了 HSTS preload 预加载列表,那么今后你域名包括所有子域名,浏览器都将强制 HTTPS 协议访问,所以你必须确保你所有子域名可以使用 HTTPS 协议访问,否则将无法打开你的网站页面!

你也可以退出 HSTS preload 预加载列表,但是由于缓存的原因,完全退出可能需要一年或更久的时间。

商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.renfei.net/posts/1626402130325676117
评论与留言

以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

微信搜一搜:任霏博客