一、说明
在windows server 2016中的IIS程序池里部署一套系统,通过https访问站点,同时考虑到安全问题以及防攻击等行为,就用上了WAF云盾功能,能有效的抵挡部分攻击,加强网站的安全性和健壮性。
应用系统一直能够正常的访问,突然有一天反馈无法访问站点,出现ERR_HTTP2_PROTOCOL_ERROR错误,最新没有更新过系统,所以应该不会是更新出现的问题,要么就是云盾或映射出现问题。
ERR_HTTP2_PROTOCOL_ERROR
是一个Chrome浏览器中的错误,表明浏览器在使用HTTP/2协议时遇到了协议违规的情况。这可能是由于服务器发送了不符合HTTP/2标准的响应导致的。
二、排查
开始安排技术和网络人员进行排查系统,查看为什么突然出现这个错误,从google浏览器反馈的错误来看,是http/2协议导致的。
1、查看服务器是否支持http/2协议,实际服务器的协议是http 1.1协议,应该不会有影响,因为其他的服务器也是一样的,可以正常访问系统。
2、公网映射内网是否错误,通过443端口进行映射内网服务器,将站点代理出去。经过host配置域名和内网IP,在同一个内网网络是可以访问站点,说明内网映射不存在问题。
3、排查浏览器问题,切换google无痕模式、火狐浏览器、IE浏览器,都无法访问,在IE浏览器可以看到请求的地址是http/2协议。但是在支付宝、QQAPP扫码url地址确实能访问,PC端不行。
4、排查云盾WAF,去掉云盾,不经过WAF访问,是可以正常访问,同时是http 1.1协议。
同时也在网上找了一些解决方法,但是都是没有起到作用,什么开启http/2协议、更改iis的配置,都是无法解决问题。
由此可见,是在云盾WAF这个环节出现问题,但是对方反馈也没有做什么更改设置,无法找到原因,只能继续排查问题所在。
三、解决
在云盾WAF的技术多方面排查发现有一个底层策略有关系,如下图:
header头部X-Frame-0ptions: deny 这段内容,发现前面有一个空格,就会导致无法访问。
这个是因为很早的时候,为了解决一些漏洞,在web.config里加上的属性X-Frame-0ptions: deny,估计是复制的时候,不小心,前面多了一个空格。
删除web.config里加上的属性X-Frame-0ptions: deny前面的空格,就能正常访问系统。
当时是可以访问系统的,应该是最近waf升级了策略,校验更加的严格,才会出现ERR_HTTP2_PROTOCOL_ERROR错误。