3

私は本番環境で 3 つの Java ベースの Web アプリケーション app1、app2、app3 を持っています。3 つすべてが検証済みの CA によって検証され、3 つの異なる Web サーバーと https でホストされています。app1,app2 は secure trust によって検証されます。app3 は trustwave によって検証されます。

以下は、証明書の証明書の階層です。Web ブラウザーを介してこれらのアプリのいずれかをヒットしたときに確認できます。

app1、app2 証明書の階層は同じです。

 Entrust.net Secure Server Certification Authority---> SecureTrust CA------->*.myAppDomain.com

app3 証明書の階層は

           Entrust.net Secure Server Certification Authority---> SecureTrust CA------->TrustWave Organization Validation CA, L------->*.myApp3.com

app1 が app2 に接続すると、正常に動作します。しかし、app1 が app3 に接続すると例外が発生します

   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

app1 をホストしている Web サーバーの jdk 内の cacert ファイル (つまり、信頼ストア) を調べました。Entrust、SecureTrust、TrustWave のエントリを見つけようとしましたが、entrustevca、entrust2048ca などのエントリしか見つかりませんでした。つまり、ルート証明書 (アプリケーション app2 と app3 の両方の Entrust ) が信頼ストアにある場合app3 の cacert ファイルで確認できる application(app3) に接続すると、app1 が httpsURLConnection を介して app3 に接続しようとしても、上記のエラーは発生しません。私はこれの原因を得ていませんか?trustwave も含める必要があるかどうかはわかりませんが、ルート証明書、つまり内部で trustwave を認証する Entrust は既にそこにありますか?

app3のcacertファイルにtrustwave証明書(app2で使用)を含める必要がある場合、そのロジックにより、app3のcacertファイルにsecuretrust(app2で使用)も含める必要がありますが、正常に機能していますか?

4

1 に答える 1

3

クライアントのトラストストアがサーバーの証明書を信頼していません。そのため、クライアントのトラストストアには、サーバーによって提供された証明書チェーンのいずれかと一致する信頼できる CA 証明書がありませんでした。その証明書チェーンは不完全でした。CA から提供されたすべてのものをサーバーのキーストアにインポートする必要があります。

于 2012-06-28T08:50:06.550 に答える