我在生产中有三个基于 Java 的 Web 应用程序 app1、app2 和 app3。所有 3 个都由经过验证的 CA 验证,并托管在 3 个不同的 Web 服务器和 https 上。app1,app2 由安全 trust 验证。app3 由 trustwave 验证。
下面是证书证书的层次结构,当我通过网络浏览器点击任何这些应用程序时,我可以看到。
app1,app2 证书层次结构相同.e
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),我可以在 app3 上的 cacert 文件中看到,那么当 app1 尝试通过 httpsURLConnection 联系 app3 时,我不应该收到上述错误。我不明白这是什么原因?我不确定我们是否还需要包括 trustwave,尽管根证书,即 Entrust,内部已经对 trustwave 进行了身份验证?
如果我需要在 app3 上的 cacert 文件中包含 trustwave 证书(由 app2 使用),那么按照该逻辑,我还应该在 app3 上的 cacert 文件中包含securetrust(由 app2 使用),但它工作正常吗?