为什么需要撤销HSTS preload提交?
HSTS preload列表一旦生效,浏览器会强制使用该域名的HTTPS连接。但在某些场景下,你可能需要撤销这个设置:
- 网站架构调整:计划将部分子域名改回HTTP(虽然不推荐)
- 证书管理变更:更换CA供应商,过渡期可能需要临时回退
- 误操作提交:不小心提交了不适合preload的域名
- 业务方向变化:网站不再提供HTTPS服务(极少情况)
无论原因如何,撤销HSTS preload是一个需要谨慎操作的过程,因为浏览器缓存更新需要时间。
撤销HSTS preload的两种核心方式
根据hstspreload.org官方说明,撤销preload列表有两种方式:
方式一:通过hstspreload.org表单申请撤销
这是官方推荐的撤销方式,适用于已经被preload的域名。
操作步骤:
- 访问 https://hstspreload.org/removal/
- 输入你的域名并提交撤销申请
- 系统会验证你的域名是否满足撤销条件
方式二:通过修改HSTS header自动触发移除
如果你希望域名自动从preload列表中移除,需要满足以下条件:
- 网站继续提供HTTPS服务(证书有效)
- HSTS header仍然发送,但移除preload指令
- header格式示例:
Strict-Transport-Security: max-age=31536000; includeSubDomains(注意没有preload)
当浏览器检测到你的域名发送了不含preload指令的有效HSTS header时,会认为你在请求从preload列表中移除。
详细操作步骤
步骤1:移除HSTS header中的preload指令
修改Nginx配置,从add_header Strict-Transport-Security中删除preload关键字。
修改前:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
修改后:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
执行nginx -t检查配置,然后nginx -s reload重载。
步骤2:保持有效的HSTS header
注意:你不能完全移除HSTS header,必须继续发送一个不含preload的有效HSTS header。如果完全移除,浏览器会认为配置错误,可能导致preload列表移除申请被拒绝。
官方推荐的"knockout entry"方式:如果你确实想完全禁用HSTS,可以设置一个max-age=0的header:
add_header Strict-Transport-Security "max-age=0" always;
步骤3:提交撤销申请(可选但推荐)
即使你已经移除了preload指令,也建议通过hstspreload.org的撤销表单正式提交申请。这会加速从Chrome内置列表中移除的过程。
撤销后需要多长时间生效?
这是最关键的注意事项:HSTS preload列表的更新不是即时的。
- Chrome浏览器:preload列表随每次Chrome大版本更新而更新,通常需要6-12周才能覆盖大多数Chrome用户
- Firefox:同样随浏览器版本更新,周期类似
- 其他浏览器:基于Chromium的浏览器(Edge、Brave等)跟随Chrome的更新周期
此外,用户本地的HSTS缓存也需要被清除。即使preload列表更新了,已经访问过你网站的用户,其浏览器仍然会记住HSTS策略,直到max-age过期或被手动清除。
注意事项和常见问题
问题1:撤销preload后,已经记住HSTS的用户怎么办?
这些用户必须手动清除浏览器的HSTS缓存(Chrome可通过chrome://net-internals/#hsts删除域名),或者等待max-age自然过期。
问题2:能否立即生效?
不能。HSTS preload列表是硬编码在浏览器中的,没有"立即生效"的撤销机制。这也是为什么提交preload前要三思。
问题3:撤销期间网站还能访问吗?
能。只要你继续提供有效的HTTPS服务,网站就可以正常访问。撤销preload只是让浏览器"不再强制"HTTPS,而不是"禁用"HTTPS。
问题4:如何确认域名是否已从preload列表移除?
可以通过以下方式确认:
- 在Chrome地址栏输入
chrome://net-internals/#hsts,在"Query HSTS/PKP domain"中查询你的域名 - 访问hstspreload.org,搜索你的域名,查看状态
- 使用
curl -I https://yourdomain.com检查HSTS header是否已不含preload指令
总结
撤销HSTS preload是一个需要耐心的过程。核心步骤是:移除header中的preload指令 → 继续提供有效HTTPS → 通过官方表单提交撤销申请 → 等待6-12周浏览器更新。
如果你确定要撤销,建议尽早开始操作,因为时间周期很长。同时,也要做好用户侧缓存未清除可能导致访问问题的应急预案。
如果你在配置HSTS header或排查preload问题时遇到困难,可以参考以下相关文章:
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论