web-dev-qa-db-ja.com

Websphereでの証明書チェーンエラー

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");

これまでに行った構成変更は次のとおりです。

  1. セットする com.ibm.websphere.ssl.retrieveLeafCertからtrue
  2. someurlとしてurlとポート443を使用して証明書を取得し、トラストストアに追加しました。
  3. サーバーを再起動しました

しかし、次の例外が発生します。

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)
5
Ayan Biswas

その安らかなサービスにアクセスしようとしている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ボタンの使用時間

17
Gas

これは、証明書が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

私の問題は同じで、次の手順に従って解決できます

2
Gourav Bhatia