SOAP SSL .(https://zzzzzzzzzzzz/xxxxx
で保護されたWebサービス)を呼び出すWebアプリケーションがあります。
サーバーは2つの証明書(ルートとリーフ)を送信するので、プロパティcom.ibm.websphere.ssl.retrieveLeafCert
を使用して2つの証明書をインポートします。
WebsphereでSSL検証を有効にするには、証明書をwebsphereに追加するだけです。
SSL証明書と鍵管理->鍵ストアと証明書-> NodeDefaultTrustStore->署名者証明書->ポートから取得:
問題は、webshphereが証明書を信頼せず、このスタックトレースを提供してくれることです。
used by: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking `https://------------------------------` : com.ibm.jsse2.util.j: PKIX path building failed: Java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is:
Java.security.cert.CertPathValidatorException: T`he certificate issued by CN=-------------------------------------------------------------------- is not trusted`; internal cause is:
Java.security.cert.CertPathValidatorException: Certificate chaining error
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.6.0]
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:56) ~[na:1.6.0]
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:39) ~[na:1.6.0]
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:527) ~[na:1.6.0]
at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.Java:1338) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.Java:1322) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.AbstractConduit.close(AbstractConduit.Java:56) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.Java:622) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.Java:62) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.Java:271) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.Java:530) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:463) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:366) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.Java:319) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.endpoint.ClientImpl.invokeWrapped(ClientImpl.Java:354) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.Java:385) ~[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
... 100 common frames omitted
`Caused by: javax.net.ssl.SSLHandshakeException`: com.ibm.jsse2.util.j: PKIX path building failed: Java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is:
Java.security.cert.CertPathValidatorException: `The certificate issued by CN=--------------------------------------------------------- is not trusted`; internal cause is:
Java.security.cert.CertPathValidatorException: Certificate chaining error
at com.ibm.jsse2.o.a(o.Java:8) ~[na:6.0 build_20130515]
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.Java:549) ~[na:6.0 build_20130515]
at com.ibm.jsse2.kb.a(kb.Java:355) ~[na:6.0 build_20130515]
at com.ibm.jsse2.kb.a(kb.Java:130) ~[na:6.0 build_20130515]
at com.ibm.jsse2.lb.a(lb.Java:135) ~[na:6.0 build_20130515]
at com.ibm.jsse2.lb.a(lb.Java:368) ~[na:6.0 build_20130515]
at com.ibm.jsse2.kb.s(kb.Java:442) ~[na:6.0 build_20130515]
at com.ibm.jsse2.kb.a(kb.Java:136) ~[na:6.0 build_20130515]
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.Java:495) ~[na:6.0 build_20130515]
at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.Java:223) ~[na:6.0 build_20130515]
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.Java:724) ~[na:6.0 build_20130515]
at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:81) ~[na:6.0 build_20130515]
at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.Java:8) ~[na:6.0 build_20130515]
at com.ibm.net.ssl.www2.protocol.https.d.connect(d.Java:20) ~[na:6.0 build_20130515]
at Sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.Java:1043) ~[na:1.6.0]
at com.ibm.net.ssl.www2.protocol.https.b.getOutputStream(b.Java:85) ~[na:6.0 build_20130515]
at org.Apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.Java:168) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.Java:1282) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.Java:1233) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.Java:195) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
at org.Apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.Java:47) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.Java:69) ~[cxf-api-2.7.4.jar:2.7.4]
at org.Apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.Java:1295) ~[cxf-rt-transports-http-2.7.4.jar:2.7.4]
... 110 common frames omitted
`Caused by: com.ibm.jsse2.util.j: PKIX path building failed:` Java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is:
Java.security.cert.CertPathValidatorException: T`he certificate issued by CN=-------------------------------------------- is not trusted`; internal cause is:
Java.security.cert.CertPathValidatorException: Certificate chaining error
at com.ibm.jsse2.util.h.b(h.Java:39) ~[na:6.0 build_20130515]
at com.ibm.jsse2.util.h.b(h.Java:21) ~[na:6.0 build_20130515]
at com.ibm.jsse2.util.g.a(g.Java:1) ~[na:6.0 build_20130515]
at com.ibm.jsse2.pc.a(pc.Java:36) ~[na:6.0 build_20130515]
at com.ibm.jsse2.pc.checkServerTrusted(pc.Java:19) ~[na:6.0 build_20130515]
at com.ibm.jsse2.pc.b(pc.Java:51) ~[na:6.0 build_20130515]
at com.ibm.jsse2.lb.a(lb.Java:65) ~[na:6.0 build_20130515]
... 128 common frames omitted
Caused by: Java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.
at com.ibm.security.cert.PKIXCertPathBuilderImpl.engineBuild(PKIXCertPathBuilderImpl.Java:411) ~[na:na]
at Java.security.cert.CertPathBuilder.build(CertPathBuilder.Java:258) ~[na:na]
at com.ibm.jsse2.util.h.b(h.Java:107) ~[na:6.0 build_20130515]
... 134 common frames omitted
Caused by: Java.security.cert.CertPathValidatorException: The certificate issued by CN=-------------------------------------------------------
at com.ibm.security.cert.BasicChecker.<init>(BasicChecker.Java:111) ~[na:na]
at com.ibm.security.cert.PKIXCertPathValidatorImpl.engineValidate(PKIXCertPathValidatorImpl.Java:178) ~[na:na]
at com.ibm.security.cert.PKIXCertPathBuilderImpl.myValidator(PKIXCertPathBuilderImpl.Java:737) ~[na:na]
at com.ibm.security.cert.PKIXCertPathBuilderImpl.buildCertPath(PKIXCertPathBuilderImpl.Java:649) ~[na:na]
at com.ibm.security.cert.PKIXCertPathBuilderImpl.buildCertPath(PKIXCertPathBuilderImpl.Java:595) ~[na:na]
at com.ibm.security.cert.PKIXCertPathBuilderImpl.engineBuild(PKIXCertPathBuilderImpl.Java:357) ~[na:na]
... 136 common frames omitted
Caused by: Java.security.cert.CertPathValidatorException: Certificate chaining error
at com.ibm.security.cert.CertPathUtil.findIssuer(CertPathUtil.Java:298) ~[na:na]
at com.ibm.security.cert.BasicChecker.<init>(BasicChecker.Java:108) ~[na:na]
... 141 common frames omitted
Installcert.Java を使用してローカル環境で同じコードをテストし、-Djavax.net.ssl.trustStore = jssecacertsでテストを実行します(jssecacertsはInstallCert.Javaによって生成されたファイルです) 。
100万個のWebsphere構成をテストします。
動作する唯一の手順は、このリンクで説明されている手順です。
Cxf intercpterを定義することにより:
<cxf:bus>
<cxf:outInterceptors>
<bean class="---------------------.WebsphereSslOutInterceptor" />
</cxf:outInterceptors>
</cxf:bus>
詳細については、以下を参照してください。
https://github.com/vlussenburg/websphere-cxf-extensions#websphere-cxf-extensions
助けてくれてありがとう。
上記のすべての応答に感謝します。問題を解決できるJava.security.cert.CertPathValidatorException:Certificate chaining error with following configuration.
詳細については、このリンクをご覧ください。
Java-trustStoreへのパス-設定プロパティが機能しない?
WebSphereで以下のようにプロパティを設定しました
[サーバー]> [アプリケーションサーバー]> [サーバー名]> [プロセス定義]> Java仮想マシン>カスタムプロパティ>新規]を選択します。
a)javax.net.ssl.trustStore = jre_install_dir\lib\security\cacerts
例:C:\ Program Files\WebSphere\AppServer\Java\jre\lib\security\cacerts
b)javax.net.ssl.trustStorePassword = changeit(デフォルト)
c)javax.net.ssl.trustStoreType = jks
詳細については、このリンクをご覧ください。
構成により、証明書がトラストストアに追加されていることがログで確認できました。
ありがとう、Uday Nilajkar
たぶん、次の technote を見てください。
特定のフィックスパックレベルにいる場合は、値com.ibm.websphere.ssl.retrieveLeafCertをtrueに設定し、 Port から取得しています。
以下に、証明書を[〜#〜] jvm [〜#〜]にインポートする手順を示しますHTTPS WS call:
A)インポートする証明書を取得
B)証明書をインポートする
すべての証明書チェーンを構成に追加する必要があります。通常、証明書には、少なくとも認証センターのルート証明書またはチェーン類似の証明書があります。
WASでは、デフォルトで署名付き証明書が必要です。
ここでの問題は、証明書パスビルダー(Java Cert path API)の一部)がSSLハンドシェイク中に証明書チェーンを構築できないことです。ハンドシェイク中、SSLピアホストはその証明書(ID )クライアントに対して、クライアントがその特定の証明書を信頼するには、クライアント側で信頼のチェーンを構築する必要があります。障害が発生したときに何が起こっているのか。ここでの問題は、信頼のチェーンを作成できないことですトラストストア(トラストアンカー)に署名者証明書またはルート証明書、あるいはその両方がありません。
PKIXトラストマネージャーは「信頼の範囲」検証を実行することに注意してください。これは、SSLピアとの信頼関係を満たすためにクライアント側で完全な証明書チェーンを必要とせず、トラストストアに署名者/中間証明書のみが必要であることを意味します。実際、リーフストア証明書をトラストストアに配置する必要がある場合は、その特定の証明書に対する明示的な信頼があり、証明書チェーンの検証は必要ないことを示しているため、機能するはずです。