2017-01-25 8 views
0

セキュリティで保護されたサーバーに接続しようとしています& JavaコードがSSLHandshakeExceptionで失敗します。 -Dhttps.protocols & -Dhttps.cipherSuitesオプション&なしを:私はすでに十分な&が試さ検索しましたSSLHandshakeException - %%無効:[セッション-1、SSL_RSA_WITH_3DES_EDE_CBC_SHA]

main, RECV TLSv1.2 ALERT: fatal, handshake_failure

%% Invalidated: [Session-1, SSL_RSA_WITH_3DES_EDE_CBC_SHA] main, called closeSocket()

main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

:私は-Djavax.net.debugを有効にした場合=すべては、私は以下のエラーを得ましたそのうちの1人は働くようです。

私ものチェック:

socketfactory.getDefaultCipherSuites() which lists the cipher stated in the error.

私は

openssl s_client -connect url:443

でチェックしますが、エラーがスローされます:

verify error:num=20:unable to get local issuer certificate

verify return:0

58555:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/ssl/s3_pkt.c:1145:SSL alert number 40

58555:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/ssl/s23_lib.c:185:

はクイックヘルプにこの1上の&の方向に感謝。

私は自分自身のHttpClientを作成していますが、この接続ではサーバーのキーストアが必要です。

public NewHttpClient(KeyStore keyStore, String pwd, Integer maxTotal, Integer defaultMaxPerRoute) throws KeyManagementException, UnrecoverableKeyException, 
NoSuchAlgorithmException, KeyStoreException { 
    HttpClientBuilder builder = HttpClientBuilder.create(); 
    SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, pwd.toCharArray()).build(); 
    builder.setSSLContext(sslContext); 
    SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(sslContext); 
    builder.setSSLSocketFactory(sslConnectionFactory); 
    Registry<ConnectionSocketFactory> schemeRegistry = RegistryBuilder.<ConnectionSocketFactory> create().register("http", PlainConnectionSocketFactory.getSocketFactory()) 
      .register("https", SSLConnectionSocketFactory.getSocketFactory()).build(); 
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(schemeRegistry); 
    connectionManager.setMaxTotal(maxTotal); 
    connectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute); 
    builder.setConnectionManager(connectionManager); 
    customHttpClient = builder.build(); 
} 

UPDATE 1:私は、SOAP-UIからキーストアを使用していた場合、それは単にどの問題なく動作しますが、以下は、私が使用していたコードです。その唯一のJavaのアプローチの問題!

更新2:3つのJVM 6,7,8を試しましたが、問題は解決しません。また、スプリングの代わりにプレーンなJavaコードからSSL接続を作成しようとしましたが、&は問題なくハンドシェークを成功させることができました。

+0

? JVM 6でも同様の問題がありました。 Oracle JDK 7を使用したときには、すべてうまくいきました... JVM 6の同じコードでも同様のエラーが発生しました。 –

+0

私は8を使用しています。しかし、私もJCEで6&7を試しました。その同じエラー! – Karthik

答えて

0

私はこれが私のアップデート2に基づいて、春の問題でしたので、私はそれが何の問題もなく働いた

org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender

&出来上がりを使用するように私のアプローチを変えたことを見ました。

私は新しいMavenのjarファイルから上記のクラスをインポートする必要がありました:JVMは、使用しているJavaで

<dependency> 
     <groupId>org.springframework.ws</groupId> 
     <artifactId>spring-ws-support</artifactId> 
     <version>2.2.0.RELEASE</version> 
    </dependency> 
関連する問題