web-dev-qa-db-ja.com

「要求されたターゲットへの有効な認証パスを見つけることができません」が、ブラウザはそれがOKであると言います

私はJavaに接続するアプリケーションを開発していますSOAP https://ut.eurodw.eu/ (欧州のデータウェアハウスのテスト環境)。最近Windows 8.1で再フォーマットした開発マシンで作業しています。今日、プログラムからSOAP=経由で作成要求を送信しようとしましたが、このエラーが発生しました:

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

上記のリンクをクリックするとわかるように、これは自己署名証明書ではありませんが、GoDaddyパブリックCAによってリリースされ、Firefoxブラウザーによって認識されます。 My Javaバージョンは1.7.0_60-b19。安全でないSSL接続を許可するためにコードを変更するのは、悪い考えです

代わりに、eurodwの証明書がトラストストアにあることを確認したいと思います。どうすれば確認できますか?そして、どうすれば新しい証明書をインポートできますか?

PS現在、最終アプリケーションがデプロイされているサーバーでテストすることはできません。自分のTomcatインストールのみを使用できます。

さまざまな証明書は、次のキーストアにあります。

%Java_HOME%/ jre/lib/security/cacerts

信頼できる証明書を一覧表示する場合:

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

パスワードはリストするオプションです。

エントリを追加する場合:

まず、インポートする証明書をエクスポートします。c:\ cert.crtとしましょう。それを行う最良の方法は、Firefoxを使用し、URLのロック画像を右クリックし、数回クリックするだけでエクスポート機能が使用できるようにすることです。

次に入力します:

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

パスワードは:changeit

エイリアスはユーザー定義ラベルであるため、賢明に選択して、いつの日か必要な場合にそれを覚えておいてください。

これにより、証明書を信頼し、すべてが再び機能するようになります。

34