4

我正在尝试使用 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 内部使用,我不想使用设置 JVM 范围的参数,System.setProperty因为这会影响所有 Web 服务客户端。

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

谢谢!

4

1 回答 1

1

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

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

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

于 2011-04-16T20:48:00.567 回答