将客户端证书传递给Web服务,而不设置系统范围的属性

时间:2011-04-16 20:01:26

标签: java web-services jax-rpc

我正在尝试使用JAX-RPC实现将客户端证书传递给Web服务。 (Web服务采用rpc编码样式)。

到目前为止,我可以通过设置系统属性来实现:

System.setProperty("javax.net.ssl.keyStore", "client_cert.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "newpasswd");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");

然后构建并调用Web服务:

CertificateInfoPortType svc = new CertificateInfoLocator().getCertificateInfo(new URL(SERVICE_URL));
svc.methodToBeInvoked();

但由于这将在EJB内部使用,我不想使用System.setProperty设置JVM范围的参数,因为这会影响所有Web服务客户端。

有没有办法将客户端证书作为参数传递?从我能够阅读的内容来看,我应该使用自定义KeyManager,但我不知道如何将自定义KeyManager设置为客户端。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定这是否适用于您如何使用jaxws,但您可以使用以下内容在jaxws客户端上设置自定义套接字工厂(使用自定义ssl上下文配置):

dispatch.getRequestContext().put(com.sun.xml.ws.developer.JAXWSProperties.SSL_SOCKET_FACTORY, getSSLContext().getSocketFactory());

(这特定于sun / oracle jaxws实现)。