2014-10-03 6 views
11

Ich entwickle eine Java-Anwendung, die eine Verbindung zu SOAP-Diensten unter https://ut.eurodw.eu/ (Testumgebung für European Datawarehouse) herstellt. Ich arbeite an meiner Entwicklungsmaschine, die kürzlich mit Windows 8.1 formatiert wurde. Heute habe ich versucht, ihnen eine Erzeugungsanforderung über SOAP aus meinem Programm und bekam diesen Fehler zu senden:"Ich kann keinen gültigen Zertifizierungspfad zum angeforderten Ziel finden", aber der Browser sagt, dass es in Ordnung ist

Caused by: javax.xml.ws.WebServiceException: Could not send Message. 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146) 
    at com.sun.proxy.$Proxy110.createDeal(Unknown Source) 
    at it.csttech.edwin.services.spring.EdwinServiceImpl.createDeal(EdwinServiceImpl.java:102) 
    at it.csttech.edwin.consumercredit.data.managers.spring.DealManagerImpl.createEdCode(DealManagerImpl.java:319) 
    ... 77 more 
Caused by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://ut.eurodw.eu/edservices/2.2/DealService.svc: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1339) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1323) 
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:628) 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:565) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:474) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:377) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:330) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135) 
    ... 80 more 
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.java:174) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1283) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1239) 
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:201) 
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47) 
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1296) 
    ... 90 more 
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
    at sun.security.validator.Validator.validate(Validator.java:260) 
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323) 
    ... 108 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380) 
    ... 114 more 

Wie Sie meinen Link oben, indem Sie sehen, das ist kein selbst signiertes Zertifikat, sondern veröffentlicht von GoDaddy öffentlichen CA , erkannt von meinem Firefox Browser. Meine Java-Version ist 1.7.0_60-b19. Es wird eine schlechte Idee sein, den Code zu ändern, um unsichere SSL-Verbindungen zu ermöglichen.

Ich möchte stattdessen sicherstellen, dass das Zertifikat von eurodw im Trust Store gespeichert ist. Wie überprüfe ich das? Und wie importiere ich möglicherweise ein neues Zertifikat?

PS Ich kann derzeit nicht auf dem Server testen, auf dem die endgültige Anwendung bereitgestellt wird: Ich kann nur meine eigene Tomcat-Installation verwenden.

% JAVA_HOME%/jre/lib/security/cacerts

Wenn Sie zur Liste der vertrauenswürdigen Zertifikate:

keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts 

+0

Gerade herausgefunden, dass Eurodw ihr Zertifikat vor ein paar Tagen erneuert hat –

Antwort

18

Die verschiedenen Zertifikate können in folgenden Schlüsselspeicher gefunden werden Das Passwort ist optional zu listen.

Wenn Sie einen Eintrag hinzufügen mögen:

Zuerst Export das Zertifikat zu importieren, lassen Sie sich sagt, es wird c: \ cert.crt. Der beste Weg, dies zu tun, ist mit Firefox, klicken Sie mit der rechten Maustaste auf das Schloss Bild in der URL, und nach ein paar Klicks haben Sie eine Exportfunktion.

Dann geben:

keytool -import -alias my-cert -file c:\cert.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts 

Das Passwort lautet: changeit

Der Alias ​​ein benutzerdefiniertes Etikett zu sein, wählen Sie es mit Bedacht, sich daran zu erinnern, wenn Sie es eines Tages brauchen, was es war.

Mit all dem sollten Sie in der Lage sein, dem Zertifikat zu vertrauen und alles wieder funktionieren zu lassen.

+3

"% JAVA_HOME%/lib/security/cacerts" (mit Anführungszeichen) funktioniert für mich. Will die Aufgabe @ Kundenseite wiederholen, bis Oracle eine aktualisierte Trust-Liste –

+0

veröffentlicht, müssen Sie die Anführungszeichen hinzufügen, wie @ usr-local sagte –

+0

Ich überprüfte meine build.gradle Datei und überprüft, auf was alle Repositories Projekt zuzugreifen versucht , öffnete diese URLs im Browser und tat wie von @Francois erwähnt, probierte es auf Ubuntu, startete Android Studio Projekt neu und es funktionierte. Wenn Sie Windows7 verwenden, um keytool auszuführen, können Sie zur Ausführung gehen, cmd eingeben und Strg + Shift + Enter drücken. Dies öffnet die Eingabeaufforderung im Administratormodus, dann suchen Sie im java-Ordner nach keytool.exe. – Ali

Verwandte Themen