JAVA - 两个客户端 java 使用 SSL 连接,第一个需要证书,第二个不需要证书
JAVA - Two clients java with SSL connection, first need certificate, second doesn't need certificate
我有一个用 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 path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我尝试清除,进入第二个客户端,系统属性:
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 1.6开发的,不控制关于SSL连接的证书。所以,当我在没有密钥库的情况下单独执行客户端时,它起作用了!
我的 Java 项目(示例)是使用 Java 1.7 开发的, 对证书进行控制。所以,解决方案是:
- 从服务器下载证书 - 第二个客户端的端点(Google Chrome,点击挂锁,下载证书.cer 格式)
- 将证书添加到密钥库
- 第二个客户端工作
我有一个用 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 path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我尝试清除,进入第二个客户端,系统属性:
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 1.6开发的,不控制关于SSL连接的证书。所以,当我在没有密钥库的情况下单独执行客户端时,它起作用了!
我的 Java 项目(示例)是使用 Java 1.7 开发的, 对证书进行控制。所以,解决方案是:
- 从服务器下载证书 - 第二个客户端的端点(Google Chrome,点击挂锁,下载证书.cer 格式)
- 将证书添加到密钥库
- 第二个客户端工作