我尝试使用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>