Java XML-RPC客户端无法向服务器发送SSL证书

Java XML-RPC客户端无法向服务器发送SSL证书,java,xml-rpc,Java,Xml Rpc,我们需要调用Confluence server的XML-RPC API来推送一些数据。我们的汇流服务器受双向SSL身份验证(双向身份验证)保护。在互联网上进行了一些搜索之后,我得到了一些关于编写具有SSL属性的xml rpc客户端,然后进行API调用的信息。但代码失败,出现以下SSLHandshake错误 *** ServerHelloDone [读取]MD5和SHA1哈希:len=4 0000:0e00。。。。 警告:找不到合适的证书-在没有客户端身份验证的情况下继续 ***证书链 **

我们需要调用Confluence server的XML-RPC API来推送一些数据。我们的汇流服务器受双向SSL身份验证(双向身份验证)保护。在互联网上进行了一些搜索之后,我得到了一些关于编写具有SSL属性的xml rpc客户端,然后进行API调用的信息。但代码失败,出现以下SSLHandshake错误

*** ServerHelloDone
[读取]MD5和SHA1哈希:len=4 0000:0e00。。。。 警告:找不到合适的证书-在没有客户端身份验证的情况下继续 ***证书链


***ECDHClientKeyExchange

main,称为closeSocket() 主,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:握手失败 main,称为close() main,称为closeInternal(true) main,称为close() main,称为closeInternal(true) JavaClient:org.apache.xmlrpc.XmlRpcException:未能创建输入流:收到致命警报:握手失败

下面是我的源代码

import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
导入org.apache.xmlrpc.client.XmlRpcClient

导入java.net.URL; 导入java.util.Vector

/** *使用SSL的XmlRpc客户端 * * */ 公共类XMLRPC_SSL_客户端{

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);
    }

}
publicstaticvoidmain(字符串[]args){
试一试{
XmlRpcClientConfigImpl clientConfig=新的XmlRpcClientConfigImpl();
clientConfig.setServerURL(新URL(“https://stg.api.collaborate.testing.com/confluence/rpc/xmlrpc"));
XmlRpcClient XmlRpcClient=新的XmlRpcClient();
setConfig(clientConfig);
向量参数=新向量();
参数添加(“confadmin1”);
参数添加(“confadmin1”);
setProperty(“java.protocol.handler.pkgs”、“com.sun.net.ssl.internal.www.protocol”);
//信任证书
setProperty(“javax.net.ssl.trustStore”,“/Users/aswain/security/trustStore/staging_api_collaborate.jks”);
setProperty(“javax.net.ssl.trustStorePassword”、“test112233”);
//发送客户端证书
setProperty(“javax.net.ssl.keyStore”,“/Users/aswain/security/certs/devuser_client_cert.jks”);
setProperty(“javax.net.ssl.keystrepassword”、“test112233”);
System.out.println(System.getProperties());
System.out.println(“通过xml rpc调用远程方法confluence2.login”);
Object result=xmlRpcClient.execute(“confluence2.login”,参数);
字符串loginToken=(字符串)结果;
System.out.println(“loginToken:+loginToken”);
}捕获(异常){
System.err.println(“JavaClient:+异常”);
}
}
}

查看*.jks文件的密码和路径正确。
请帮助解决此问题

如果您将-Djavax.net.debug=ssl添加到您的客户端程序中,它可能会告诉您更多正在发生的事情。@NikolajHansen-我已经这样做了,并粘贴了上面日志中的“找不到合适的证书-未经客户端身份验证继续”消息。很抱歉,没有';我看不出来。读这个。完全相同的错误。那么您的服务器可能没有客户端的公钥?