2017-01-25 1 views
0

Ich versuche, eine Verbindung zu einem sicheren Server herzustellen & der Java-Code schlägt mit der SSLHandshakeException fehl. Wenn diese Funktion aktiviert ich -Djavax.net.debug = alle ich den unten Fehlermeldung anzeigt:SSLHandshakeException - %% Invalidiert: [Sitzung-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

Ich habe schon genug & versucht gesucht: -Dhttps.protocols & -Dhttps.cipherSuites Optionen & keine von ihnen scheinen zu arbeiten.

Ich habe auch für:

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

ich mit dem

openssl s_client -connect url:443

geprüft

aber es wirft einen Fehler:

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:

Appreciate schnelle Hilfe & Richtung auf dieser.

Ich mache das mit Frühling ws, wo ich einen eigenen HttpClient erstelle, da diese Verbindung einen Server Keystore für eine Verbindung erfordert. Nach dem Code, den ich verwende:

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: Wenn ich den Schlüsselspeicher von SOAP-UI verwenden, funktioniert es einfach, ohne jede Frage. Es ist nur ein Problem im Java-Ansatz!

UPDATE 2: Ich habe versucht mit 3 JVMs 6, 7 & 8 aber das Problem besteht weiter. Außerdem habe ich versucht, eine SSL-Verbindung von einem einfachen Java-Code anstelle von Feder & war in der Lage, erfolgreich einen Handshake ohne Probleme zu tun.

+0

in Java, die JVM Sie verwenden? Ich hatte ähnliches Problem auf JVM 6; wenn ich Oracle JDK 7 verwendet habe, hat alles ziemlich gut funktioniert ... derselbe Code auf JVM 6 erzeugte einen ähnlichen Fehler –

+0

Ich benutze 8. Aber ich habe auch versucht mit 6 & 7 mit JCE. Es ist der gleiche Fehler! – Karthik

Antwort

0

sah ich, dass dies ein Frühlingsausgabe war auf Grund meiner Update 2. Also änderte ich mein Ansatz die es ohne Probleme gearbeitet

org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender

& voila zu verwenden.

Ich hatte die obige Klasse von einem neuen Maven Glas zu importieren:

<dependency> 
     <groupId>org.springframework.ws</groupId> 
     <artifactId>spring-ws-support</artifactId> 
     <version>2.2.0.RELEASE</version> 
    </dependency> 
Verwandte Themen