0

我已经成功安装了平台独立二进制版本 Geoserver ( http://geoserver.org/release/2.16.2/ )。使用它已经有一段时间了,没有真正的问题。我现在想将此版本的 Geoserver 用于 OpenLayers 网站(使用 GeoLocation),但这需要使用 HTTP 的所有组件部分都使用 HTTPS...Geoserver 是我需要迁移的最后一个服务器。

我在网上查看过,似乎有很多关于将 Geoserver 移动到 HTTPS 的信息,但它与我的安装并不完全相关。一些示例讨论 server.xml 文件(我的安装没有)和更新我没有的 apache conf 文件(/etc/apache2/sites-avaiable/smallmelo-le-ssl.conf)所以我我正在努力获取有关我特定版本的 Geoserver 的说明。文档声明它在 Jetty servlet 上运行。有没有人有关于如何配置 https 的任何文档或链接?

进步!!所以我的安装是使用 Jetty。我已经使用有效证书正确设置了密钥库。我已经更新了 start.ini 文件以反映密钥库和密码的位置,但是......当我尝试运行 geoserver 时,我得到:

ERROR : No module found to provide ssl for https{enabled}

我的码头安装的模块文件夹中没有 SSL.MOD 模块。我确实从https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.2.13.v20150730/挖出了一个模块(ssl),但我现在得到:

java.lang.IllegalStateException: No constructor class org.eclipse.jetty.server.ServerConnector([],{}) in file:/C:/Program%20Files/Geoserver/geoserver-2.16.2/etc/jetty-https.xml

我一直在努力找出如何更新此文件并添加所需内容。问题是我不是 Java 专家,所以我不想只是随机复制别人的配置设置。

4

3 回答 3

2

这是一个找到Jetty 教程并遵循它的简单案例,GeoServer 并不关心https.

但是,我应该警告您,在 GeoServer 文档中找不到太多帮助的原因是您不应该在生产环境中运行与平台无关的二进制文件。这就是文档需要一个server.xml(tomcat 的一部分)并假设您位于旨在处理 ssl 的 Apache2 或 Nginx Web 服务器的原因。

于 2020-03-10T08:13:38.603 回答
1

好的,只是想分享这个以防万一。它有点简短,但希望会有用。请注意:我的设置使用了合法的 GoDaddy DNS/SSL 证书,因此这可能会限制某些人并迫使您使用自签名证书。

感谢创造“啊哈”时刻的 Ian Turton :)

我使用以下 youtube 视频来安装 Tomcat 和 Geoserver:https ://www.youtube.com/watch?v=RyCFKGm4NSw

首先,一旦我运行了 Tomcat(我使用了 8081 端口,因为 8080 已经在使用中)。请注意,当我安装到端口 8081 时它没有更新server.xml文件,所以我必须手动打开它并更改

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

然后重新启动Tomcat。

我使用了从 GoDaddy 下载的合法 PFX 文件。我已经与他们一起设置了 SSL 证书/DNS,所以这只是请求 PFX 文件的问题。

其次,我使用从 AdoptOpenJDK 安装的 JAVA 导入了我的 PFX。我转到命令行,导航到 AdoptOpenJDK bin 文件夹(其中有一个keytool.exe应用程序)。然后我运行了这个命令:

keytool -importkeystore -srckeystore c:/temp/mygodaddycert.pfx -srcstoretype pkcs12 -destkeystore c:/temp/mycert.jks -deststoretype JKS  

当提示输入源密码的密码时,我从 GoDaddy 获得了该密码,然后我为 JKS 文件使用了自己完全不同的密码。然后我将我的 JKS 文件复制到./conf/certs文件夹(我创建了certs文件夹)

第三,我将此添加到我的/conf/server.xml文件中:

   <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150"
        SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS"
        keystoreFile="conf/certs/mycert.jks" 
        keystorePass="<your_jks_password_when_registering_with_keytool>"
    />

我重新启动Tomcat...

然后我使用来自 GoDaddy 的 DNS 连接到实例:https://myXYZ.de:8443/瞧,Tomcat 在 SSL 上运行,没有证书错误。由于安装了 Geoserver。我可以将地理服务器添加到最后:https://myXYZ.de:8443/geoserver瞧,2号。

于 2020-03-10T17:38:48.630 回答
1

您提到的两条警告消息都来自 GeoServer 存储库上 Jetty 配置文件中的 bit rot。您发现 ssl.mod 文件丢失,手动添加它可以解决该问题。

第二个错误java.lang.IllegalStateException: No constructor class来自 Jetty 版本配置文件的混合。GeoServer 2.16 存储库中的 jetty-https.xml 文件来自 Jetty 9.4,jetty-ssl.xml 来自 Jetty 9.2。在这些版本之间的某个时间点,构造函数的位置<Configure id="Server" class="org.eclipse.jetty.server.Server">从 jetty-https 移动到 jetty-ssl。它在 GeoServer 存储库中未正确更新,因此存在一组不匹配的 xml 文件。

我通过从 9.2 复制 jetty-https.xml 文件以匹配 Geoserver 中包含的 9.2 版本的 jetty-ssl.xml 解决了这个问题。您可以使用与运行 Geoserver 相匹配的最新码头文件,但请确保复制所有这些文件,ssl.mod、jetty-https.xml、jetty-ssl.xml 和 jetty-ssl-context.xml。

于 2020-04-20T22:38:24.443 回答