解析javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败错误?

问题:

 编辑: – 试图在我的中以更显示的方式格式化问题并接受答案
这是原来的问题:
我收到这个错误

详细信息sun.security.validator.ValidatorException:PKIX路径构建失败:
sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径到请求的目标
导致javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径到请求的目标

我正在使用tomcat 6作为webserver。我有两个https webbapplication安装在不同的tomcat上的差异端口,但在同一台机器上。说App1(port 8443)
  App2(port 443)App1连接到App2。当App1连接到App2 i时,会收到上面的错误。我知道这是非常常见的错误,所以遇到了不同的解决方案
 论坛和网站。我在tomcat的server.xml中有下面的条目,即

keystoreFile="c:/.keystore" 
keystorePass="changeit"

每个网站都说同样的原因,由app2给出的证书不在app1 jvm的受信任的商店中。这似乎也是真的,当我累了打相同
IE浏览器中的URL,它工作(加热,这个网站的安全证书有问题,这里我说继续到这个网站)但是当同样的URL
被java客户端打击(在我的情况下)。所以我得到上面的错误。所以要把它放在trustore我尝试了这些树选项,
 选项1

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

 选项2
在环境变量中设置下面

CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

 2选项
在环境变量中设置下面

JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

 但没有任何工作
 最后工作了什么正在执行Pascal Thivent在How to handle invalid SSL certificates with Apache HttpClient?中建议的java方法,即
执行程序InstallCert。
 但是这种方法对于devbox设置是很好的,但是我不能在生产环境中使用它。
我想知道
为什么上面提到的三种方法在app2服务器的server.xml中提及了相同的值,在信任库中提到了相同的值,因此设置不起作用
 System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
app1程序中。
有关更多信息,我是如何进行连接

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

if (conn instanceof HttpsURLConnection) {

  HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

  reply.load(conn1.getInputStream());

回答:

您需要将应用2的证书添加到位于%JAVA_HOME%\lib\security\cacerts的已用JVM的信任库文件中
首先,您可以通过运行以下命令来检查您的证书是否已在信任库中:
 keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"(您不需要提供密码)
如果您的证书丢失,您可以通过使用浏览器下载证书,并使用以下命令将其添加到信任库:
 keytool -import -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore <KeystoreFile> -storepass <Password>
Afer导入您可以再次运行第一个命令来检查您的证书是否已添加。
Sun / Oracle信息可以找到here

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 4