2012-06-28 136 views
3

我有三个基于Java的Web应用程序app1,app2和app3在生产。所有3个都通过了验证的CA的验证,并托管在3个不同的Web服务器 和https上。 app1,app2通过安全trust.app3验证通过trustwave验证。javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:

下面是证书的证书层次结构,我可以看到当我通过网络浏览器打开这些应用程序中的任何一个时。

APP1,APP2证书hirerarchy是相同.E

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

APP3证书hirerarchy是

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

现在,当APP1连接到APP 2,做工精细。但是,当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 

现在我对Web服务器托管APP1里面JDK CACERT文件(即信任店)看看。我试图找到Entrust,SecureTrust,TrustWave的条目,但只发现了像entrustevca,entrust2048ca等条目。所以,如果我按照逻辑推断,如果根证书(它是应用程序app2和app3的Entrust)位于信任存储区联系应用程序(app3),我可以在app3上看到cacert文件,然后当app1尝试通过httpsURLConnection与app3联系时,我不应该得到上述错误。 我不知道这个原因?我不确定我们是否也需要包含trustwave,尽管根证书即Entrust已经在那里内部验证了trustwave?

如果我需要在CACERT文件(APP 2使用)上APP3然后通过这个逻辑我也应该inlcude在CACERT文件 securetrust(由APP 2使用)上APP3 trustwave证书,但它工作正常?

回答

3

客户端的信任库不信任服务器的证书。因此,客户端的信任库中没有可信任的CA证书与服务器提供的证书链中的任何内容匹配。所以证书链不完整。您需要输入您已由CA提供的所有内容到服务器的密钥存储区。

+0

嗨EJP。当你说“客户的信任库不信任服务器的证书”。希望你的意思是webserver作为客户端而不是web浏览器作为客户端因为当我在任何浏览器中点击相同的网址时,它会为证书提供任何警告或例外而获得成功。根据我的理解,它正在发生,因为我可以在浏览器受信任的根证书中找到Entrust.net安全服务器证书颁发机构的条目。 –

+0

您还说过的另一点是“所以客户端的信任库中没有可信任的CA证书与服务器提供的证书链中的任何内容匹配。”但是我可以在app1的cacert文件中找到entrustevca,entrust2048ca,其他委托相关条目[app3使用的根证书]的条目。所以当app1联系app3时,它不应该抛出异常。对? –

+0

我的意思是您的应用程序中的任何元素是相关事务中的客户端。当然这很明显。如果服务器提供的链中存在由客户端的信任库所信任的证书,则不会得到此异常。埃尔戈没有。 – EJP

相关问题