URL https://someurl.com からRESTfulサービスを利用しようとしています。コードに次のプロパティを追加しました。
Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
Security.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
Security.setProperty("javax.net.ssl.keyStore", "keystore.jks");
Security.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
Security.setProperty("javax.net.ssl.trustStoreType", "JKS");
これまでに行った構成変更は次のとおりです。
com.ibm.websphere.ssl.retrieveLeafCert
からtrue
しかし、次の例外が発生します。
Java.security.cert.CertPathValidatorException: Certificate chaining error
javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: 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=Walmart Root CA, O=Wal-Mart Stores Inc is not trusted; internal cause is:
Java.security.cert.CertPathValidatorException: Certificate chaining error
at com.ibm.jsse2.o.a(o.Java:22)
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.Java:423)
at com.ibm.jsse2.kb.a(kb.Java:192)
at com.ibm.jsse2.kb.a(kb.Java:176)
at com.ibm.jsse2.lb.a(lb.Java:53)
at com.ibm.jsse2.lb.a(lb.Java:464)
at com.ibm.jsse2.kb.s(kb.Java:545)
at com.ibm.jsse2.kb.a(kb.Java:530)
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.Java:79)
at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.Java:437)
at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.Java:142)
at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:686)
at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.Java:98)
at com.ibm.net.ssl.www2.protocol.https.d.connect(d.Java:13)
at com.ibm.net.ssl.www2.protocol.https.b.connect(b.Java:6)
at com.dwl.tcrm.tester.RESTClient_2.main(RESTClient_2.Java:76)
その安らかなサービスにアクセスしようとしているWebアプリケーションがあると仮定します。
まず、_javax.net.ssl.*
_プロパティを使用してストアを設定するのではなく、WebSphereで提供されるSSL構成を使用する必要があります。したがって、これらすべてのsetProperty()
呼び出しにコメントを付けます。次に、サービスサーバー証明書をトラストストアに追加する必要があります。
Web管理コンソールにログインします。
Security > SSL certificate and key management > Key stores and certificates > NodeDefaultTrustStore > Signer certificates
_に移動しますRetrieve from port
_ボタンをクリックし、ホスト名、443ポート、およびエイリアスを指定します。Retrieve singer information
_ボタンをクリックします。いくつかのバージョンでは、子証明書がインポートされました(ルートではありません)。その場合、ルート証明書と中間証明書を手動でダウンロードする必要があります(例:ブラウザー経由で、それをNodeDefaultTrustStore
にインポートしますが、これは_Retrieve..
_ではなくAdd
ボタンの使用時間
これは、証明書がcacertsに追加されていないことを意味します。このコマンドを次のように実行してみてください
keytool -list -v -keystore your_path_to_cacerts(cacertsに証明書のリストを提供します)証明書のシリアル番号を照合して確認します。そこにない場合は、以下の手順に従ってください
中間証明書をエクスポートするには:Internet Explorer->ツール->インターネットオプション->コンテンツ->証明書->証明書パスを表示するには:証明書を選択->表示->証明書パス->証明書をエクスポートするには:証明書を選択->エクスポート-> DER
エンコードされたバイナリー形式->保存(Firefoxから->ツール->オプション->詳細設定->暗号化->証明書の表示)(ここに記載 http://www-01.ibm.com/support/docview。 wss?uid = swg21592616 )この後、以下のコマンドでこのエクスポートされた証明書を追加します
keytool -import -trustcacerts -Keystore CACERTS(path)-alias alias -file cert path export in step 3
私の問題は同じで、次の手順に従って解決できます