JAVA-两个具有SSL连接的客户端Java,第一个需要证书,第二个不需要证书

时间:2019-01-10 12:15:47

标签: java rest ssl certificate rest-client

我有一个用myEclipse Java 1.7构建的Java项目。项目调用两个客户端,它们在两个不同的SSL Web服务端点上发出Rest请求。

..
public void Example() {
..
CallFirstClient();
CallSecondClient();
..
}

第一个客户端需要证书,第二个客户端不需要证书。 如果我单独执行第二个客户端,则无需证书即可工作。 在第一个客户端中,我加载了证书,并且可以正常工作:

System.setProperty("javax.net.ssl.trustStore", pathKeyStore);
System.setProperty("javax.net.ssl.trustStorePassword", "password");
System.setProperty("javax.net.ssl.keyStore", pathKeyStore);
System.setProperty("javax.net.ssl.keyStorePassword", "password");   

第一个客户端(带有证书)执行后,第二个客户端不起作用,因为证书有问题(但不需要!)。

  

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

我试图将第二个系统属性清除到第二个客户端中

System.setProperty("com.sun.net.ssl.checkRevocation", "false");
System.clearProperty("javax.net.ssl.trustStore");
System.clearProperty("javax.net.ssl.trustStorePassword");
System.clearProperty("javax.net.ssl.keyStore");
System.clearProperty("javax.net.ssl.keyStorePassword");

但是它不起作用。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:-1)

解决方案

第二个客户端是使用 Java 1.6 开发的,该客户端无法控制有关SSL连接的证书。因此,当我在没有密钥库的情况下独自执行客户端时,它就起作用了!

我的Java项目(示例)是使用 Java 1.7 开发的,它控制证书。因此,解决方案是:

  1. 从服务器下载证书-第二个客户端的端点(Google Chrome,单击挂锁,下载证书.cer格式)
  2. 将证书添加到密钥库
  3. 第二个客户工作