Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:_Java_Security_Https_Ssl Certificate - Fatal编程技术网

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:,java,security,https,ssl-certificate,Java,Security,Https,Ssl Certificate,我在生产中有三个基于java的web应用程序app1、app2和app3。所有3个都由经过验证的CA进行验证,并托管在3个不同的web服务器上 和https。 app1、app2由安全信任验证。app3由trustwave验证 下面是证书的层次结构,当我通过web浏览器点击这些应用程序时,我可以看到 app1、app2证书租用人关系相同。e Entrust.net Secure Server Certification Authority---> SecureTrust CA------

我在生产中有三个基于java的web应用程序app1、app2和app3。所有3个都由经过验证的CA进行验证,并托管在3个不同的web服务器上 和https。 app1、app2由安全信任验证。app3由trustwave验证

下面是证书的层次结构,当我通过web浏览器点击这些应用程序时,我可以看到

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文件(即信任存储)。我试图找到委托、SecureTrust、TrustWave的条目,但只找到了委托EVCA、委托2048CA等条目。因此,如果按照逻辑,如果根证书(对于应用程序app2和app3都是委托)位于联系人应用程序(app3)的信任存储中,我可以在app3上的cacert文件中看到,那么,当app1试图通过httpsURLConnection联系app3时,我不应该出现上述错误我不明白这件事的原因?我不确定是否还需要包括trustwave,尽管根证书(即内部认证trustwave的委托)已经存在?

如果我需要在app3上的cacert文件中包含trustwave证书(由app2使用),那么根据该逻辑,我还应该包含
app3上的cacert文件中存在securetrust(由app2使用),但它工作正常?

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

Hi EJP。当您说“客户端的信任库不信任服务器的证书”时,希望您指的是作为客户端的web服务器,而不是作为客户端的web浏览器。因为当我在任何浏览器中点击相同的url时,它会成功地为证书提供任何警告或异常。据我所知,之所以会发生这种情况,是因为我可以在浏览器可信根证书中找到Trust.net Secure Server Certification Authority的条目。另一点,您还说“因此,客户端的信任库中没有与服务器提供的证书链中的任何内容相匹配的可信CA证书。”但是我可以在app1的cacert文件中找到委托EVCA、委托2048CA的条目,以及其他与委托相关的条目[这是app3使用的根证书]。因此,当app1联系app3时,它不应引发异常。对吗?我的意思是应用程序中的任何元素都是相关交易中的客户。这当然是显而易见的。如果服务器提供的链中有一个证书受客户端信任库信任,则不会出现此异常。因此没有。可能根证书不同,或者是旧版本。导出证书并检查是否可以使用root验证。