我正在从 SymmetricDS (SDS) 2.5.13 升级到 3.1.5。我在 SDS 2.5.13 下配置了 TLS/HTTPS 并按预期工作。但是,使用完全相同的证书、密钥库/信任库文件和相同的 JDK,我在服务包装器日志 (wrapper.log) 中的 SDS 3.1.5 下收到以下错误:
SEND TLSv1 ALERT: fatal, description = handshake_failure
WRITE: TLSv1 Alert, length = 2
called closeSocket()
handling exception: javax.net.ssl.SSLHandshakeException: no cipher suites in common
我有两个节点配置,其中一个配置为注册服务器(父节点)。子节点配置为推送和拉取更改。我正在使用 Sun (Oracle) JDK 7 update 5 和适当的 JCE Unlimited Strength Jurisdiction Policy Files(以访问 256 位密码)。
我在独立配置中运行 SDS 作为 Server 2008 下的 Windows 服务。Windows 防火墙当前已关闭。
我通过 sym_service.conf 文件将以下与 TLS 相关的 Java 参数传递给服务包装器:
wrapper.java.additional.6=-Dsym.keystore.file=c:/java-keystore/bfvm01-w2ka.ks
wrapper.java.additional.7=-Djavax.net.ssl.keyStore=c:/java-keystore/bfvm01-w2ka.ks
wrapper.java.additional.8=-Djavax.net.ssl.trustStore=c:/java-keystore/bfvm01-w2ka.ks
wrapper.java.additional.9=-Djavax.net.ssl.keyStorePassword=letmein
wrapper.java.additional.10=-Djavax.net.ssl.trustStorePassword=letmein
wrapper.java.additional.11=-Dsun.net.client.defaultReadTimeout=1800000
wrapper.java.additional.12=-Dsun.net.client.defaultConnectTimeout=1800000
wrapper.java.additional.13=-Djavax.net.debug=ssl,handshake
注意:作为 Java 应用程序的标准做法,我们对密钥库和信任库使用相同的 Java 密钥库文件。
这是服务包装器配置为启动 SDS 的方式:
wrapper.app.parameter.1=org.jumpmind.symmetric.SymmetricLauncher
wrapper.app.parameter.2=--secure-server
wrapper.app.parameter.3=--secure-port
wrapper.app.parameter.4=25684
wrapper.app.parameter.5=--properties
wrapper.app.parameter.6=../conf/symmetric.properties
sym_node 和 symmetric.properties 中的条目已正确配置为使用 HTTPS(而不是 HTTP)。
发起与父节点通信的子 SDS 节点报告此错误:
WRITE: TLSv1 Handshake, length = 198
READ: TLSv1 Alert, length = 2
RECV TLSv1 ALERT: fatal, handshake_failure
called closeSocket()
handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
父节点报此错误:
SEND TLSv1 ALERT: fatal, description = handshake_failure
WRITE: TLSv1 Alert, length = 2
called closeSocket()
handling exception: javax.net.ssl.SSLHandshakeException: no cipher suites in common
正如我之前提到的,相同的配置(服务器、证书、keystore/trustore 文件、JDK)可以很好地实现 SDS 2.5.13 下的 TLS/HTTPS 安全性。唯一的变化是切换到 SDS 3.1.5。如果我在 SDS 3.1.5 中禁用 TLS/HTTPS 配置并改用 HTTP,则父节点和子节点可以相互通信。
作为一个绝望的、健全的检查,我编写了一个快速的“Hello World”客户端服务器应用程序,以在我的子节点机器上创建一个 SSLSocket 并向服务器节点机器发送一行文本(使用我一直使用的相同 TCP 端口SDS)。使用相同的 JDK 和相同的密钥库/信任库文件编译和运行程序。像冠军一样工作。
我完全被难住了。任何帮助,将不胜感激。