セキュリティで保護されたサーバーに接続しようとしています& 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接続を作成しようとしましたが、&は問題なくハンドシェークを成功させることができました。
? JVM 6でも同様の問題がありました。 Oracle JDK 7を使用したときには、すべてうまくいきました... JVM 6の同じコードでも同様のエラーが発生しました。 –
私は8を使用しています。しかし、私もJCEで6&7を試しました。その同じエラー! – Karthik