JAVA - 两个客户端java与SSL连接,第一个需要证书,第二个不需要证书

问题描述 投票:0回答:1

我有一个用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");

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

java rest ssl certificate rest-client
1个回答
-1
投票

第二个客户端是使用Java 1.6开发的,它不能控制SSL连接的证书。因此,当我在没有密钥库的情况下单独执行客户端时,它可以工作!

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

  1. 从服务器下载证书 - 第二个客户端的终点(谷歌浏览器,点击挂锁,下载证书.cer格式)
  2. 将证书添加到密钥库
  3. 第二个客户工作
© www.soinside.com 2019 - 2024. All rights reserved.