【问题标题】:JAVA - Two clients java with SSL connection, first need certificate, second doesn't need certificateJAVA - 具有 SSL 连接的两个客户端 java,第一个需要证书,第二个不需要证书
【发布时间】:2019-01-10 12:15:46
【问题描述】:

我有一个用 myEclipse 构建的 Java 项目,Java 1.7。项目调用在两个不同 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】:

解决方案

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

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

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

【讨论】:

  • Java 1.6 对 SSL 证书的控制与其他版本一样。将服务器证书添加到您的密钥库不会使任何工作。将其添加到您的 truststore 可能,但前提是服务器具有自签名证书。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2015-01-24
相关资源
最近更新 更多