【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)

Geoserver是我们常用的地图服务器,在开源系统中的应用比较广泛。在实际环境中,我们可能会选用官方的二进制安装包进行部署,这样只要服务器上有java环境就可以运行,方便在现场进行部署。

1.问题来源

这次由于甲方一月一次的漏洞扫描,爆出了jetty的漏洞,搜索得知jetty 9.4.53版本之下的jetty都会受到影响,而现场的geoserver版本已经是2.24.0版本的了,其jetty版本是9.4.52版本,非常尴尬,还得升级。去geoserver官网查找最新版本是2.24.1,下载下来一看,jetty版本仍然是9.4.52,这就尬住了,官方也没有去解决这个问题,只能自己硬着头皮去替换jetty的jar包了。

2.问题解决

之前在解决geoserver jetty漏洞的问题时,我曾经采用替换lib包里的jetty包和外面的start.jar文件来进行修复,现在故技重施,解决思路也是奔着这个目标去。
【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)_第1张图片
首先,替换lib包中的jetty包,jetty的包要去jetty官网下载jetty官网下载
【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)_第2张图片
直接下载zip包即可,分两步替换:

  1. 下载下来之后对照geoserver发行版本中的jetty jar包进行选择替换,总共需要13个jar包
    【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)_第3张图片
  2. 然后将jetty中的start.jar包也替换到geoserver发行包中
    start.ini是jetty的启动配置文件,之前在使用高版本geoserver替换低版本geoserver时需要一并替换,但是现在使用的jetty的官方包替换,这里替换掉之后会丢掉geoserver中的很多配置,所以这里并没有做替换。

替换完成之后就可以去启动试一下了,果然事情不是那么顺利的,报错了

java.lang.UnsupportedClassVersionError: org/geoserver/GeoserverInitStartupListener has been 
compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the 
Java Runtime only recognizes class file versions up to 52.0

百度一下发现是java版本的事情,因为我们替换的jetty包是高版本java编译的,所以运行环境也只能使用高版本的java,java版本和这上面的version的对应关系如下:
【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)_第4张图片
由上图可知,我们的java版本最低也要升级到java11了,去JDK的下载页面查看,发现现在推荐的版本最低都是17了,那那就下载17用吧,反正是向下兼容的。
于是在本地电脑上安装17来测试,发现可以正常运行,大工告成。

3.JDK多版本安装的小插曲

在本地测试安装多版本JDK的过程中,还遇到了JAVA_HOME已经修改成jdk17的版本了,但去cmd中一试还是jdk8版本:

【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)_第5张图片
于是排查自己的修改,发现path中bin目录的配置还是用的原来jdk8的目录,于是修改,再次测试,还是jdk8的版本,没办法,只能继续查找原因。
然后找到如下解决方法:

  1. 删除C:\Windows\System32目录下的java.exe、javaw.exe、javaws.exe三个文件(如果没有就不用删)
  2. 删除环境变量Path中C:\ProgramData\Oracle\Java\javapath的配置

我在system32中没有发现这些文件,在path中发现了javapath的配置,果断删除,重新进入cmd测试,jdk版本就切换过来了。

你可能感兴趣的:(开源GIS,jetty,apache,http,geoserver)