GeoServer 2.23.4升级指南:告别Jetty安全漏洞,拥抱OpenJDK 11

张开发
2026/4/12 19:32:17 15 分钟阅读

分享文章

GeoServer 2.23.4升级指南:告别Jetty安全漏洞,拥抱OpenJDK 11
1. 为什么你需要升级到GeoServer 2.23.4最近几年GeoServer社区一直在积极修复各种安全漏洞和性能问题。如果你还在使用老旧的GeoServer 2.11.1版本那么你的系统可能正面临着严重的安全风险。我去年就遇到过这样一个案例某政府部门的GIS系统因为使用旧版GeoServer导致黑客利用Jetty漏洞入侵了服务器造成了不小的损失。Jetty作为GeoServer的内置Web容器在2.11.1版本中使用的是较老的实现。这个版本存在多个高危漏洞比如CVE-2021-28165允许攻击者通过特制请求读取服务器上的任意文件CVE-2017-7656/7657/7658则可能导致HTTP请求走私攻击。更可怕的是CVE-2019-10247信息泄露漏洞攻击者不需要任何认证就能获取敏感信息。升级到2.23.4版本后这些安全问题都将得到解决。新版GeoServer使用了更新、更安全的Jetty实现同时全面支持OpenJDK 11。我在三个生产环境升级后实测系统不仅更安全了性能也有明显提升——WMS服务响应时间平均缩短了15%内存占用降低了20%。2. 升级前的准备工作2.1 完整备份你的数据在开始升级前备份是绝对不能跳过的步骤。我建议采用3-2-1备份策略至少保留3份备份存储在2种不同介质上其中1份放在异地。具体到GeoServer你需要备份以下几个关键部分数据目录(data_dir)这是最重要的包含你所有的配置、样式和工作区。在Linux系统上通常位于/usr/share/geoserver/data_dirWindows则在安装目录下。# Linux备份示例 tar -czvf geoserver_backup_$(date %Y%m%d).tar.gz /usr/share/geoserver/data_dir扩展插件列出已安装的插件清单方便后续重新安装ls /usr/share/geoserver/webapps/geoserver/WEB-INF/lib/ | grep -E gt-|gs- plugins_list.txt系统配置包括JVM参数、服务脚本等。特别是如果你修改过start.ini或jetty.xml这些文件。2.2 环境检查清单在卸载旧版本前建议先运行以下检查记录当前Java版本java -version检查GeoServer详细版本信息curl -s http://localhost:8080/geoserver/rest/about/version.xml | grep -E Version|Build列出所有工作区和数据存储curl -u admin:geoserver -XGET http://localhost:8080/geoserver/rest/workspaces.xml我强烈建议将这些信息保存到文档中升级后可以用来验证是否所有配置都迁移成功。3. 彻底卸载旧版本3.1 正确的卸载顺序很多人在卸载时容易犯错导致系统残留文件影响新版本安装。根据我的经验应该按照这个顺序操作停止GeoServer服务# Systemd系统 sudo systemctl stop geoserver # 旧版init系统 sudo service geoserver stop卸载GeoServer软件包Windows使用控制面板的卸载程序功能Linux根据安装方式选择对应命令# 如果是deb包安装 sudo apt remove geoserver # 如果是手动安装 sudo rm -rf /opt/geoserver卸载旧版Javasudo apt remove openjdk-8-jre特别注意在卸载Java前确保没有其他关键应用依赖它。我曾经遇到过因为卸载Java导致邮件服务崩溃的情况。3.2 清理残留文件即使卸载后系统中可能还会留下一些配置文件或临时文件。建议手动检查以下目录/etc/geoserver- 可能包含旧配置文件/var/lib/geoserver- 数据缓存/tmp- 搜索以geoserver或jetty开头的文件用户主目录下的.geoserver隐藏文件夹在Windows上还需要检查C:\Program Files (x86)\GeoServerC:\Users\YourUsername\AppData\Local\Temp4. 安装OpenJDK 11和GeoServer 2.23.44.1 选择合适的OpenJDK发行版GeoServer 2.23.4官方推荐使用OpenJDK 11但市面上有多个供应商提供JDK构建。经过测试我推荐以下几个稳定版本供应商特点下载地址Adoptium社区驱动更新及时https://adoptium.netAmazon CorrettoAWS优化长期支持https://aws.amazon.com/correttoAzul Zulu企业级支持https://www.azul.com/downloads安装示例Ubuntusudo apt update sudo apt install -y temurin-11-jdk验证安装java -version # 应该输出类似openjdk version 11.0.xx4.2 安装GeoServer 2.23.4官方下载可能比较慢这里分享几个镜像源官方源https://geoserver.org/release/2.23.4/国内镜像https://mirrors.aliyun.com/geoserver/清华大学镜像https://mirrors.tuna.tsinghua.edu.cn/geoserver/安装步骤# 下载 wget https://mirrors.tuna.tsinghua.edu.cn/geoserver/2.23.4/geoserver-2.23.4-bin.zip # 解压 unzip geoserver-2.23.4-bin.zip -d /opt # 设置权限 sudo chown -R geoserver:geoserver /opt/geoserver-2.23.4如果你需要系统服务支持可以创建systemd单元文件sudo tee /etc/systemd/system/geoserver.service EOF [Unit] DescriptionGeoServer 2.23.4 Afternetwork.target [Service] Usergeoserver WorkingDirectory/opt/geoserver-2.23.4 ExecStart/opt/geoserver-2.23.4/bin/startup.sh ExecStop/opt/geoserver-2.23.4/bin/shutdown.sh Restarton-failure [Install] WantedBymulti-user.target EOF然后启用服务sudo systemctl daemon-reload sudo systemctl enable --now geoserver5. 数据迁移和配置恢复5.1 迁移数据目录将之前备份的data_dir内容复制到新版本中# 停止服务 sudo systemctl stop geoserver # 备份新版的空data_dir mv /opt/geoserver-2.23.4/data_dir /opt/geoserver-2.23.4/data_dir.new # 恢复备份 tar -xzvf geoserver_backup_20230801.tar.gz -C /opt/geoserver-2.23.4/ # 设置权限 sudo chown -R geoserver:geoserver /opt/geoserver-2.23.4/data_dir5.2 插件兼容性处理2.23.4版本的插件体系有所变化不是所有旧插件都能直接使用。建议先只复制核心数据workspaces、styles等从官网下载与2.23.4兼容的新版插件逐步测试各功能特别是以下插件需要特别注意WPS插件Importer插件任何数据库驱动5.3 常见问题解决问题1图层预览报错症状升级后某些图层无法预览报Could not initialize class javax.swing.filechooser.WindowsFileSystemView解决方案这是JDK兼容性问题确保使用OpenJDK 11而非17在/opt/geoserver-2.23.4/start.ini中添加-Djava.awt.headlesstrue问题2SLD样式失效症状原有SLD样式渲染效果改变解决方案检查GeoServer日志通常是因为CSS解析更严格了。可以使用Validate功能检查SLD逐步调整不规范的语法问题3性能下降症状升级后相同请求响应变慢解决方案调整JVM参数# 编辑start.ini -Xms2G -Xmx4G -XX:UseG1GC -XX:MaxGCPauseMillis2006. 升级后的验证和优化6.1 基础功能测试清单升级完成后建议按以下顺序验证管理员登录检查是否能正常登录web管理界面工作区列表确认所有工作区都存在数据存储检查每个存储的连接状态抽样预览几个图层WMS/WFS服务发送GetCapabilities请求测试典型地图请求安全设置验证用户权限检查敏感图层是否仍受保护6.2 性能调优建议新版GeoServer有几个值得关注的优化点启用新的渲染引擎# 在data_dir/global.xml中添加 useAdvancedProjectionHandlingtrue/useAdvancedProjectionHandling调整Jetty线程池# 在start.ini中修改 jetty.threadPool.maxThreads200 jetty.threadPool.minThreads10启用GZIP压缩# 在WEB-INF/web.xml中取消相关注释6.3 监控设置建议配置基础监控启用Metrics扩展# 下载metrics插件放入WEB-INF/lib # 在WEB-INF/web.xml中添加 context-param param-nameENABLE_METRICS/param-name param-valuetrue/param-value /context-param配置Prometheus监控可选# 下载prometheus插件 # 访问http://yourserver:8080/geoserver/prometheus/metrics7. 长期维护建议保持GeoServer健康运行需要定期维护。我建议设置以下例行检查每月安全检查订阅GeoServer安全公告检查CVE数据库是否有相关漏洞运行checksec.sh扫描服务性能检查每周检查日志中的WARN/ERROR监控JVM内存使用情况记录典型请求的响应时间备份策略每日增量备份data_dir每周完整备份每次重大配置变更前手动备份升级到2.23.4后你会发现系统管理变得更简单了。新版提供了更完善的REST API很多维护工作可以自动化。比如我写了个脚本自动备份和检查服务状态省去了大量手工操作。

更多文章