Linux中GeoServer/Jetty安装SSL教程
作者
log
时间
2023-09-27

地理服务器标志

1、使用JDK的keytool创建证书

keytool 在JVM的bin目录下,运行以下命令,创建keystore,执行过程中需要输入姓名、国家等信息以及keystore password(密码后续会用到)

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

验证keystore的可用性(password输入上一步的密码)

keytool -list -keystore keystore -storepass password

成功后内容如下:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

le-f8a123c3-abcd-4bbb-b341-40251cf90a0b, 02.jun.2018, PrivateKeyEntry,
Certificate fingerprint (SHA1): A1:BF:53:7F:30:00:11:22:33:44:8D:F4:8A:20:25:FF:6B:D5:89:7C

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".

将keystore复制到GeoServer目录 /usr/share/geoserver/etc,原先的keystore文件备份

2、查看jetty版本号,补充和替换相关文件

需要补充和替换相关文件的原因是GeoServer升级的过程中,对应的启用https相关的文件并没有升级,原文见stackoverflow的IT_User评论。

查看jetty版本号

在GeoServer安装目录(/usr/share/geoserver)下运行以下命令查看

java -jar start.jar --version

也可以直接到lib目录(/usr/share/geoserver/lib)直接查看查看jetty版本号

下载查看jetty完整版

在maven目录https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/ 下找到对本的版本(本文是9.4.18.v20190429),下载zip版本,解压备用。

替换文件

使用下载的jetty的文件替换GeoServer中的文件 替换usr/share/geoserver/etc下的jetty-http.xml、jetty-https.xml和jetty-ssl.xml文件,新增jetty-ssl-context.xml文件,在usr/share/geoserver/modules下新增ssl.mod,在modules下新建文件夹ssl,将keystore复制到该目录下。
编辑jetty-ssl.xml文件,将KeyStorePassword、KeyManagerPassword和TrustStorePassword替换为创建keystore时输入的密码。

3、启用https、ssl

修改 usr/share/geoserver/start.ini文件,在# Module: http部分后增加以下内容(password为创建keystore时输入的密码)。

#SSL
--module=ssl
--module=https
jetty.secure.port=8443
jetty.keystore=etc/keystore
jetty.truststore=etc/keystore
jetty.keystore.password=password
jetty.keymanager.password=password
jetty.truststore.password=password

在usr/share/geoserver目录下运行以下命令,启用https、ssl

java -jar start.jar --add-to-startd=https
java -jar start.jar --add-to-startd=ssl

如果出现错误,说明上一步的替换文件出现问题,根据错误替换对应的文件。

4、启动Geoserver

$ cd /usr/share/geoserver/bin
$ ./startup.sh

如果出现java.lang.IllegalStateException: No constructor class的错误说明前面你下载的jetty-distribution的版本不对,请重新检查并下载对应的版本。
如果没有错误,在浏览器中输入https://localhost:8443就可以通过https访问GeoServer了。

如果是Windows部署可以参考教程:https://monicamohangis.medium.com/installing-ssl-certificate-for-geoserver-jetty-1d325e23e0e1