让 Geode 使用 TLSv1

Make Geode use TLSv1

出于向后兼容的原因,我需要一个 Geode Jetty 服务器来使用 TLSv1 而不是 1.1 或 1.2

gemfire.properties 中设置 ssl-enabled-components=webssl-protocols=TLSv1.0 然后当我启动 Geode 并使用 SSL Labs 检查 HTTPS 连接时,我得到一个 TLS 结果:

我正在寻找 TLS 1.1 和 TLS 1.0 检查也说 Yes 而不是 No

Geode SSL docsMake sure your Java installation includes the JSSE API and familiarize yourself with its use.

JSSE 是关于 JRE/lib/security 目录中的 java.security 配置。我将其设置为不禁用任何安全算法并重新启动 Geode,但结果是一样的。 TLS 1.1 和 1.0 未能通过上述 SSL 实验室测试。

有没有办法强制 Geode 以 https.protocols=TLSv1 开头?

当我尝试使用 --J=-XX:https.protocols=TLSv1 启动定位器时,我得到

Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Unrecognized VM option 'https.protocols=TLSv1'

我找不到单独的 Jetty 配置...

Update --J=-Dhttps.protocols=TLSv1 是将 TLS 协议分配给 JVM 的正确设置,并且适用于启动 Geode 定位器和服务器。

Update 当我设置 java.security 设置 jdk.tls.disabledAlgorithms=TLSv1.1, TLSv1.2 时,根本无法通过 HTTPS 与 Jetty 服务器通信。这让我觉得 Geode / Jetty ssl-protocols=TLSv1.0 设置也不适用?

Jetty config 表示 TLS v1.0, v1.1 and SSL v3 are no longer supported by default. If your Jetty implementation requires these protocols for legacy support, they can be enabled manually.

有没有办法用 Geode 配置 Jetty?

我不相信你目前可以做到这一点。主要是因为 Jetty 的内部配置方式。 Jetty 维护由正则表达式 ^.*_(MD5|SHA|SHA1)$ 定义的排除密码列表。不幸的是,这个列表似乎胜过任何可以添加为 'included' 的密码。这是我用于测试的一个非常简单的 Jetty 示例:https://gist.github.com/jdeppe-pivotal/c0c6e7de4282bc077357749fc91bc44f。当你 运行 this.

时,Jetty 会生成一个很好的密码和协议转储

就目前而言,您可以使用以下 curl 执行成功的请求:curl -k -v --tlsv1.2 https://localhost:8081/。现在,如果您尝试使用 tlsv1.0 它将失败,因为必要的密码套件都被禁用了。但是,如果您取消注释该行: sslContextFactory.setExcludeCipherSuites() 那么事情应该开始工作了。这样做是为了删除所有当前排除的密码(并允许使用它们)。不幸的是,如果您只尝试添加密码(不排除所有内容),事情仍然不起作用。请注意,通过这样做,Jetty 仍配置为 TLSv1.2(以及 1.1 和 1.0),但客户端可以使用较低的协议版本。

底线是 Geode 没有明确排除 Jetty 的任何密码。因此,如果您希望添加必要的密码,它们很可能不会有效。我为此打开了一个错误:https://issues.apache.org/jira/browse/GEODE-3891