Java 带有客户端存根的Axis2 SSLContext

Java 带有客户端存根的Axis2 SSLContext,java,wcf,ssl,axis2,Java,Wcf,Ssl,Axis2,我正在尝试使用Axis2客户机存根(WSDL2Java)配置Java客户机。应用程序使用需要客户端证书的WCF服务。我能够让应用程序工作的唯一方法是更改系统属性,如下代码所示: System.setProperty("javax.net.ssl.keyStoreType", "JKS"); System.setProperty("javax.net.ssl.keyStore","path/to/my/keystore"); System.setProperty("javax.net.ssl.ke

我正在尝试使用Axis2客户机存根(WSDL2Java)配置Java客户机。应用程序使用需要客户端证书的WCF服务。我能够让应用程序工作的唯一方法是更改系统属性,如下代码所示:

System.setProperty("javax.net.ssl.keyStoreType", "JKS");
System.setProperty("javax.net.ssl.keyStore","path/to/my/keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
但是,我希望对同一Tomcat服务器上的不同应用程序使用不同的密钥库。根据我所做的一些研究,我研究了如何使用SSLContext,但我没有发现任何使用WSDL2Java创建的客户端存根的示例。有没有人举过一个例子,或者知道如何做到这一点

谢谢

我想补充一点,我们正在使用WS-Policy和ConfigurationContext来参与Rampart。我想我可以编辑policy.xml文件来指示密钥库。这样行吗?当我试图运行应用程序时,我得到了一个SocketException:SocketException:未实现未连接的套接字。以下是policy.xml文件的当前格式

<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy wsu:Id="BasicHttpBinding"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsecurity-secext-1.1.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
    <wsp:All>
        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
                <sp:TransportToken>
                    <wsp:Policy>
                        <sp:HttpsToken RequireClientCertificate="true" /> 
                    </wsp:Policy>
                </sp:TransportToken>
                <sp:AlgorithmSuite>
                    <wsp:Policy>
                        <sp:Basic256 /> 
                    </wsp:Policy>
                </sp:AlgorithmSuite>
                <sp:Layout>
                    <wsp:Policy>
                        <sp:Strict /> 
                    </wsp:Policy>
                </sp:Layout>
            </wsp:Policy>
        </sp:TransportBinding>
        <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
            <ramp:user>myapplication</ramp:user>
            <ramp:passwordCallbackClass>com.myproject.classes.PWCBHandler</ramp:passwordCallbackClass>
            <ramp:sslConfig>
                <ramp:property name="javax.net.ssl.keyStoreType">JKS</ramp:property>
                <ramp:property name="javax.net.ssl.keyStore">path/to/my/keystore</ramp:property>
                <ramp:property name="javax.net.ssl.keyStorePassword">changeit</ramp:property>
                <ramp:property name="javax.net.ssl.trustStoreType">JKS</ramp:property>
                <ramp:property name="javax.net.ssl.trustStore">path/to/my/truststore</ramp:property>
                <ramp:property name="javax.net.ssl.trustStorePassword">changeit</ramp:property>
            </ramp:sslConfig>
        </ramp:RampartConfig>
    </wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

我的申请
com.myproject.classes.PWCBHandler
JKS
路径/到/我的/密钥库
换
JKS
路径/到/我的/信任库
换

我以前使用过:SSLContext sslCtx=SSLContext.getInstance(“TLS”);init(null,new TrustManager[]{new TrustAllTrustManager()},null);aStub._getServiceClient().getOptions().setProperty(HTTPConstants.CUSTOM_PROTOCOL_处理程序,新协议(“https”,(ProtocolSocketFactory)新SSLProtocolSocketFactory(sslCtx),443));或者可以从命令行:-Djavax.net.ssl.trustStorePassword=mypassword-Djavax.net.ssl.trustStore=/home/support/myTrustStore