我们需要调用Confluence服务器的XML-RPC API来推送一些数据。我们的Confluence服务器受双向SSL身份验证(相互身份验证)保护。在互联网上进行一些搜索后,我得到了一些关于编写具有SSL属性的xml-rpc客户端然后进行API调用的信息。但代码失败,因为SSLHandshake错误。
*** ServerHelloDone
[read] MD5和SHA1哈希:len = 4 0000:0E 00 00 00 .... 警告:未找到合适的证书 - 未经客户端身份验证继续 ***证书链
*** ECDHClientKeyExchange
main,名为closeSocket() main,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure main,叫close() main,叫做closeInternal(true) main,叫close() main,叫做closeInternal(true) JavaClient:org.apache.xmlrpc.XmlRpcException:无法创建输入流:收到致命警报:handshake_failure
以下是我的源代码:
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.client.XmlRpcClient;
import java.net.URL; import java.util.Vector;
/ ** *带有SSL的XmlRpc客户端 * * * / 公共类XMLRPC_SSL_Client {
public static void main(String[] args) {
try {
XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
clientConfig.setServerURL(new URL("https://stg.api.collaborate.testing.com/confluence/rpc/xmlrpc"));
XmlRpcClient xmlRpcClient = new XmlRpcClient();
xmlRpcClient.setConfig(clientConfig);
Vector<String> params = new Vector<String>();
params.add("confadmin1");
params.add("confadmin1");
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
//Trust srever's certificate
System.setProperty("javax.net.ssl.trustStore", "/Users/aswain/security/truststore/staging_api_collaborate.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "test112233");
//Send client's certificate
System.setProperty("javax.net.ssl.keyStore", "/Users/aswain/security/certs/devuser_client_cert.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "test112233");
System.out.println(System.getProperties());
System.out.println("Invoking remote method confluence2.login via xml-rpc");
Object result = xmlRpcClient.execute("confluence2.login", params);
String loginToken = (String) result;
System.out.println("loginToken : " + loginToken);
} catch (Exception exception) {
System.err.println("JavaClient: " + exception);
}
}
}
密码&amp;查看* .jks文件的路径是正确的。 请帮助解决此问题。