2012-12-14 88 views
2

我正在從SymmetricDS(SDS)2.5.13升級到3.1.5。 我配置了TLS/HTTPS並按預期在SDS 2.5.13下工作。然而,使用完全相同的證書,密鑰庫/信任庫文件,並同JDK,我得到SDS 3.1.5下以下錯誤在服務包裝日誌(wrapper.log):握手失敗/無共同密碼套件 - SymmetricDS 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策略文件(以獲得對256位密碼的訪問權限)。

我在Server 2008下將獨立配置中的SDS作爲Windows服務運行.Windows防火牆當前處於關閉狀態。

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 

注:

我通過sym_service.conf文件通過下列TLS相關的Java參數的服務包裝由於這裏是標準的做法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和相同的密鑰庫/信任庫文件編譯並運行程序。像冠軍一樣工作。

我完全難住了。任何幫助,將不勝感激。

回答

2

回答了我自己的問題。顯然,除我之外,沒有人在SymmetricDS(SDS)節點之間使用TLS(來自完全沒有響應)。原來的錯誤信息讓我失望,讓我看着所有錯誤的地方。

看來SDS的3.x版本(至少3.1.5)現在要求您提供您在密鑰庫中使用的證書的「別名」。該值作爲Java運行時參數「sym.keystore.ssl.cert.alias」提供。對於Windows用戶,它將被放置在服務包裝配置文件(sym_service.conf)中:

包裝。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.symmetric.SymmetricWebServer使用certficate別名如下:

sslConnectorFactory.setCertAlias(System.getProperty(SystemConstants.SYSPROP_KEYSTORE_CERT_ALIAS, 「符號」));

SystemConstants.SYSPROP_KEYSTORE_CERT_ALIAS設置爲「sym.keystore.ssl.cert.alias」。

一旦我在sym_service.conf中提供了正確的別名,我很高興。

  • 布魯斯