私は本番環境で 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で使用)も含める必要がありますが、正常に機能していますか?