[建议] 可单独控制HSTS开关
背景与遇到的问题
存在http:80 能自动跳转 https:443 的需求,但是打开强制 HTTPS 后,自动开启了HSTS:
Strict-Transport-Security:
max-age=63072000; includeSubdomains; preload
包含子域名,HSTS 应该谨慎开启。 另外是否支持includeSubDomains ,还需要根据证书的作用域判断,或者让用户自行选择。
建议的解决方案
HTTPS跳转功能和HSTS 拆分为2个选项,HSTS 可以再细化一下,例如判断是否要添加。可参考云CDN厂商的配置,
例如阿里云:
能具体说下开启 HSTS 会出现什么问题么
能具体说下开启 HSTS 会出现什么问题么
实际生产环境,不一定所有子域名能够打开https。这个返回的头信息,会让浏览器直接拒接所有http请求。
运维同学在刚刚做HTTPS 的时候,开启了HSTS,甚至加了includeSubDomains,某些老客户端访问HTTP的接口的时候跳到HTTS,由于SNI、加密套件兼容性等问题出现故障。HSTS 和HPKP 都是通过头信息传递给浏览器,浏览器都会根据max-age 缓存起来,所以在添加了HSTS 和HPKP 了之后,想要回滚,就没有在服务端回滚程序那么方便了。
感谢分享。开启强制 HTTPS 时,雷池只会在 https 服务上返回 HSTS ,似乎不用考虑客户端不兼容 https 的情况?
准备下个版本先快速处理一下:
- 把 max-age 改为 5184000
- 删去 includeSubDomains
建议 max-age 可以由用户指定,max-age 的值如果低于 15552000(6个月)的话,在一些检测 SSL 部署合规性的网站中,可能会导致降低评级。
- 把 max-age 改为 5184000
- 删去 includeSubDomains
已在 3.11 中修改
能具体说下开启 HSTS 会出现什么问题么
假如 test.examlpe.com 域名专用于测试网站程序,网站程序测试过程中需要切换 HTTP / HTTPS 模式,如果该域名在 WAF 使用过一次(开启强制 HTTPS),下一次需要 HTTP 测试网站程序(不支持 HTTPS)时浏览器会自动跳转为 HTTPS。
因此我建议雷池WAF通用设置中删除强制 HTTPS、使用 HTTP/2、监听 IPv6、传递客户端连接的 host 和协议这4个选项,将这些选项转移到各个站点的设置中。
如果各个站点独立设置在实现上比较困难,也建议将强制 HTTPS 和使用 HSTS 分拆为两个选项,另外再加一个 HSTS 天数设置以满足不同的用户需求。
我的文章里面写了一种迂回自定义HSTS头的方法,目前可以一用,供参考
最新版 6.9.0 已支持站点级别配置