【发布时间】: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