SafeLine icon indicating copy to clipboard operation
SafeLine copied to clipboard

[建议] 可单独控制HSTS开关

Open fangpsh opened this issue 2 years ago • 8 comments

背景与遇到的问题

存在http:80 能自动跳转 https:443 的需求,但是打开强制 HTTPS 后,自动开启了HSTS:

Strict-Transport-Security:
max-age=63072000; includeSubdomains; preload

包含子域名,HSTS 应该谨慎开启。 另外是否支持includeSubDomains ,还需要根据证书的作用域判断,或者让用户自行选择。

建议的解决方案

HTTPS跳转功能和HSTS 拆分为2个选项,HSTS 可以再细化一下,例如判断是否要添加。可参考云CDN厂商的配置, 例如阿里云: image

fangpsh avatar Oct 25 '23 03:10 fangpsh

能具体说下开启 HSTS 会出现什么问题么

Lorna0 avatar Oct 27 '23 07:10 Lorna0

能具体说下开启 HSTS 会出现什么问题么

实际生产环境,不一定所有子域名能够打开https。这个返回的头信息,会让浏览器直接拒接所有http请求。

fangpsh avatar Oct 27 '23 08:10 fangpsh

运维同学在刚刚做HTTPS 的时候,开启了HSTS,甚至加了includeSubDomains,某些老客户端访问HTTP的接口的时候跳到HTTS,由于SNI、加密套件兼容性等问题出现故障。HSTS 和HPKP 都是通过头信息传递给浏览器,浏览器都会根据max-age 缓存起来,所以在添加了HSTS 和HPKP 了之后,想要回滚,就没有在服务端回滚程序那么方便了。

fangpsh avatar Oct 27 '23 09:10 fangpsh

感谢分享。开启强制 HTTPS 时,雷池只会在 https 服务上返回 HSTS ,似乎不用考虑客户端不兼容 https 的情况?

准备下个版本先快速处理一下:

  1. 把 max-age 改为 5184000
  2. 删去 includeSubDomains

Lorna0 avatar Nov 06 '23 09:11 Lorna0

建议 max-age 可以由用户指定,max-age 的值如果低于 15552000(6个月)的话,在一些检测 SSL 部署合规性的网站中,可能会导致降低评级。

cpms avatar Nov 07 '23 07:11 cpms

  1. 把 max-age 改为 5184000
  2. 删去 includeSubDomains

已在 3.11 中修改

Lorna0 avatar Nov 10 '23 07:11 Lorna0

能具体说下开启 HSTS 会出现什么问题么

假如 test.examlpe.com 域名专用于测试网站程序,网站程序测试过程中需要切换 HTTP / HTTPS 模式,如果该域名在 WAF 使用过一次(开启强制 HTTPS),下一次需要 HTTP 测试网站程序(不支持 HTTPS)时浏览器会自动跳转为 HTTPS。

因此我建议雷池WAF通用设置中删除强制 HTTPS、使用 HTTP/2、监听 IPv6、传递客户端连接的 host 和协议这4个选项,将这些选项转移到各个站点的设置中。

如果各个站点独立设置在实现上比较困难,也建议将强制 HTTPS 和使用 HSTS 分拆为两个选项,另外再加一个 HSTS 天数设置以满足不同的用户需求。

simin-in-tw avatar Dec 11 '23 19:12 simin-in-tw

我的文章里面写了一种迂回自定义HSTS头的方法,目前可以一用,供参考

Lvshujun0918 avatar Apr 06 '24 09:04 Lvshujun0918

最新版 6.9.0 已支持站点级别配置

xbingW avatar Sep 19 '24 03:09 xbingW