Apache与Spring Boot服务HSTS已配置却显示禁用的解决咨询
解决Apache HSTS配置在Firefox和Tenable中不生效的问题
先确认配置的核心前提
- 必须放在HTTPS虚拟主机段:HSTS头只能通过HTTPS响应发送,你的
Header always set指令一定要放在<VirtualHost *:443>块里,绝对不能放在HTTP的*:80配置段,否则浏览器和Tenable都会直接忽略这个头。 - 检查Apache模块是否加载:执行
apachectl -M(或httpd -M),确认输出里有headers_module和ssl_module。如果没有,在httpd.conf里添加这两行再重启服务:LoadModule headers_module modules/mod_headers.so LoadModule ssl_module modules/mod_ssl.so
修正HSTS配置细节
- 避免后端头冲突:如果Spring Boot也在发送HSTS头,会和Apache的配置冲突,把指令改成
Header always setifempty,只在没有该头的时候设置:Header always setifempty Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" - 规范格式减少兼容问题:部分工具对分号后的空格敏感,调整成紧凑格式试试:
Header always set Strict-Transport-Security "max-age=63072000;includeSubDomains;preload"
Firefox端调试与验证
- 手动核对响应头:按F12打开开发者工具,切到「网络」标签,刷新后看HTTPS请求的响应头,确认
Strict-Transport-Security的内容和配置完全一致。 - 清除浏览器HSTS缓存:如果之前浏览器存了错误状态,在地址栏输
about:config,搜索network.stricttransportsecurity.hosts右键重置,再把network.stricttransportsecurity.preloadlist临时设为false,重启浏览器后再访问站点。 - 注意preload的区别:配置了
preload但没提交到预加载列表的话,Firefox不会显示预加载状态,但不影响HSTS本身启用。
Tenable扫描适配
- 指定扫描HTTPS端口:Tenable默认可能扫HTTP端口,要确保扫描目标是443端口,因为HSTS只在HTTPS响应里生效。
- 检查扫描策略:在Tenable的扫描策略中,确认「HTTP Strict Transport Security」检测项已启用,且检测逻辑是检查响应头存在且
max-age大于0。 - 重新触发扫描:修改配置并重启Apache后,等5-10分钟让配置完全生效,再重新扫,避免缓存的旧结果干扰。
最终验证步骤
- 重启Apache:执行
apachectl restart(或systemctl restart httpd,根据系统调整) - 用curl验证:
curl -I https://你的域名,确认输出里有正确的HSTS头 - 查看Firefox安全标签:点击地址栏锁图标,在「连接安全」里确认HSTS已启用
- 重新运行Tenable扫描,确认漏洞项消失
内容的提问来源于stack exchange,提问作者Chanel
相关产品推荐
相关产品推荐

