Java 握手失败/没有通用密码套件-SymmetricDS 3.1.5

Java 握手失败/没有通用密码套件-SymmetricDS 3.1.5,java,replication,ssl,keystore,database-replication,Java,Replication,Ssl,Keystore,Database Replication,我正在从SymmetricDS(SDS)2.5.13升级到3.1.5我在SDS 2.5.13下配置了TLS/HTTPS,并按预期工作。但是,使用完全相同的证书、密钥库/信任库文件和相同的JDK,我在服务包装器日志(wrapper.log)中的SDS 3.1.5中得到以下错误: 我有两个节点的配置,其中一个配置为注册服务器(父节点)。子节点配置为推式和拉式更改。我正在使用Sun(Oracle)JDK 7 update 5和适当的JCE Unlimited Strength辖区策略文件(以访问256

我正在从SymmetricDS(SDS)2.5.13升级到3.1.5我在SDS 2.5.13下配置了TLS/HTTPS,并按预期工作。但是,使用完全相同的证书、密钥库/信任库文件和相同的JDK,我在服务包装器日志(wrapper.log)中的SDS 3.1.5中得到以下错误:

我有两个节点的配置,其中一个配置为注册服务器(父节点)。子节点配置为推式和拉式更改。我正在使用Sun(Oracle)JDK 7 update 5和适当的JCE Unlimited Strength辖区策略文件(以访问256位密码)

我在Server2008下以独立配置作为windows服务运行SDS。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
父节点报告此错误:

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
正如我前面提到的,相同的配置(服务器、证书、密钥库/信任库文件、JDK)可以很好地实现SDS 2.5.13下的TLS/HTTPS安全性。唯一的增量是切换到SDS 3.1.5。如果我在SDS 3.1.5中禁用TLS/HTTPS配置并改用HTTP,则父节点和子节点可以相互通信

作为一个绝望的、理智的检查,我编写了一个快速的“Hello World”客户端服务器应用程序,在我的子节点机器上创建一个SSLSocket,并向服务器节点机器发送一行文本(使用我用于SDS的相同TCP端口)。使用相同的JDK和相同的密钥库/信任库文件编译并运行程序。像冠军一样工作


我完全被难住了。任何帮助都将不胜感激。

回答了我自己的问题。显然,除了我(完全没有响应),没有人在SymmetricDS(SDS)节点之间使用TLS。最初的错误消息让我很生气,让我找错了地方

SDS的3.x版本(至少3.1.5)现在要求您提供密钥库中使用的证书的“别名”。该值作为Java运行时参数“sym.keystore.ssl.cert.alias”提供。对于Windows用户,它将放在服务包装器配置文件(sym_service.conf)中:

wrapper.java.additional.XX=-Dsym.keystore.ssl.cert.alias=foo

SDS 2.5.13中似乎不需要或不存在该参数,SDS 3.1.5(或更高版本)中也未记录该参数。它不会出现在SDS 3.1.5(或SDS 3.2.0,我选中)二进制下载提供的任何配置文件中

通过查看SDS源代码如何建立安全连接,我能够解决我的SDS TLS问题

org.jumpmind.SymmetricWebServer使用证书别名,如下所示:

sslConnectorFactory.setCertAlias(System.getProperty(SystemConstants.SYSPROP_KEYSTORE_CERT_ALIAS,“sym”)

SystemConstants.SYSPROP_KEYSTORE_CERT_别名设置为“sym.KEYSTORE.ssl.CERT.ALIAS

一旦我在sym_service.conf中提供了正确的别名,我就可以开始了

  • 布鲁斯