2

SymmetricDS (SDS) 2.5.13 から 3.1.5 にアップグレードしています。SDS 2.5.13 で TLS/HTTPS が構成され、期待どおりに動作しています。ただし、まったく同じ証明書、キーストア/トラストストア ファイル、および同じ JDKを使用すると、SDS 3.1.5 でサービス ラッパー ログ (wrapper.log) に次のエラーが記録されます。

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

1 つが登録サーバー (親ノード) として構成された 2 つのノード構成があります。子ノードは、変更をプッシュおよびプルするように構成されています。Sun (Oracle) JDK 7 update 5 と適切な JCE Unlimited Strength Jurisdiction ポリシー ファイルを使用しています (256 ビット暗号にアクセスするため)。

Server 2008 で 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 のエントリは、(HTTP ではなく) HTTPS を使用するように適切に構成されています。

親との通信を開始する子 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

前述したように、同じ構成 (サーバー、証明書、キーストア/トラストア ファイル、JDK) は、SDS 2.5.13 で TLS/HTTPS セキュリティを実現するために正常に機能します。唯一の違いは、SDS 3.1.5 への切り替えです。SDS 3.1.5 で TLS/HTTPS 構成を無効にし、代わりに HTTP を使用すると、親ノードと子ノードは相互に通信できます。

必死の健全性チェックとして、「Hello World」という簡単なクライアント サーバー アプリをコーディングして、子ノード マシンに SSLSocket を作成し、テキスト行をサーバー ノード マシンに送信しました (使用していたのと同じ TCP ポートを使用)。 SDSの場合)。同じJDKと同じキーストア/トラストストアファイルを使用してプログラムをコンパイルして実行しました。チャンピオンのように働きました。

私は完全に困惑しています。どんな助けでも大歓迎です。

4

1 に答える 1

2

私自身の質問に答えました。どうやら私を除いて、誰も 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.symmetric.SymmetricWebServer は、次のように証明書エイリアスを使用します。

sslConnectorFactory.setCertAlias(System.getProperty(SystemConstants.SYSPROP_KEYSTORE_CERT_ALIAS, "sym"));

SystemConstants.SYSPROP_KEYSTORE_CERT_ALIAS は「sym.keystore.ssl.cert.alias」に設定されています。

sym_service.conf で正しいエイリアスを指定したら、準備完了です。

  • ブルース
于 2012-12-21T15:24:41.450 に答える