内容提要
HSTS(HTTP Strict Transport Security)是一种安全机制,强制浏览器使用HTTPS与网站通信,减少会话劫持的风险。通过启用HSTS,浏览器只会使用HTTPS访问网站,防止被ISP或中间人拦截。要启用HSTS,需要在HTTPS响应中添加Strict-Transport-Security头。将网站预加载到HSTS预加载列表中可以进一步增强安全性并加快网站加载速度。但是,加入预加载列表需要确保所有子域名支持HTTPS。HSTS有效地防止NTP攻击,可以在hstspreload.org上进行检查和提交。加入预加载列表意味着所有域名和子域名都将被强制使用HTTPS,因此确保所有子域名支持HTTPS非常重要。由于缓存的原因,退出预加载列表可能需要一年或更长时间。
延伸解读
加入预加载列表前的硬性条件
文章明确指出,网站必须所有子域名都支持 HTTPS 才能考虑 HSTS preload。如果任何一个子域名不支持,就不适合继续。此外,一级域名需能从 HTTP 重定向到 HTTPS,且响应头必须包含 max-age 至少一年、includeSubDomains 和 preload 三个参数。这些条件缺一不可,否则提交到 hstspreload.org 可能无法通过检查。
预加载带来的速度与安全收益
加入 HSTS preload 列表后,浏览器内置名单会强制使用 HTTPS 访问,省去首次 HTTP 到 HTTPS 的重定向步骤,从而加快加载。同时,由于浏览器不再发起 HTTP 请求,运营商或中间人无法在重定向环节劫持会话。文章还提到,预加载能有效防止基于 NTP 攻击操纵系统时间使 HSTS 条目过期的风险。
退出预加载列表的长期代价
文章提醒,一旦加入预加载列表,所有子域名都将被强制 HTTPS,若有不支持 HTTPS 的子域名将无法访问。虽然可以申请退出,但由于浏览器缓存原因,完全退出可能需要一年或更长时间。这意味着决策前必须确保所有子域名长期支持 HTTPS,否则后续调整会非常被动。
Q&A
HSTS 是什么,它有什么作用?
HSTS(HTTP Strict Transport Security)是一种安全机制,强制浏览器使用 HTTPS 与网站通信,减少会话劫持风险。启用后,浏览器会放弃 HTTP 明文请求,直接使用 HTTPS 加密访问,防止运营商或中间人劫持。
如何为网站启用 HSTS?
在 HTTPS 响应头中添加 Strict-Transport-Security 头,有三种写法:1) max-age=31536000;2) max-age=31536000; includeSubDomains;3) max-age=31536000; includeSubDomains; preload。其中 max-age 设置策略存活时间,includeSubDomains 包含子域名,preload 允许加入预加载列表。
加入 HSTS preload 预加载列表有什么好处?
加入预加载列表可以加速网站访问,因为浏览器直接强制使用 HTTPS,省去了 HTTP 重定向到 HTTPS 的步骤;同时能有效防止会话劫持和 NTP 攻击,确保安全性。
如何将网站加入 HSTS preload 预加载列表?
首先确保一级域名支持 HTTPS 并能从 HTTP 重定向到 HTTPS;然后在 HTTPS 响应头中设置 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload(max-age 至少一年);接着到 hstspreload.org 检查并提交申请;等待 Chromium 更新后,域名将进入预加载列表。
加入 HSTS preload 预加载列表有什么风险或注意事项?
加入后,所有子域名都将被强制使用 HTTPS,因此必须确保所有子域名都支持 HTTPS,否则将无法访问。此外,退出预加载列表可能因缓存原因需要一年或更长时间。
如何检查一个域名是否在 HSTS 预加载列表中?
可以打开 Chrome 设置页面 chrome://net-internals/#hsts,在 Query HSTS/PKP domain 处输入域名进行查询。