如何为javax.xml.ws.Service配置SSL套接字?

时间:2012-01-13 21:38:40

标签: ssl authentication client wsdl

我有一个tomcat应用程序,它调用启用了IIS托管的ssl,启用了客户端身份验证的Web服务

这个Tomcat应用程序与多个wenservices对话,可能每个都需要客户端身份验证以及PKI身份验证。

对于IIS Web服务,wsdl url可以更改,因此我使用

javax.xml.ws.Service(url,qname)构造函数,传递wsdl的url ...

问题是我需要使用自定义客户端密钥调用上面的SSL。如何告诉上面的构造函数使用我用自定义KeyManager创建的sslsocket?我不想用 HttpsURLConnection.setDefaultSSLSocketFactory将强制执行其他传出的ssl连接以跟随我的密钥管理器,该密钥管理器是IIS Web服务独有的。 感谢您的回复。

1 个答案:

答案 0 :(得分:2)

如果您按照your similar question on ServerFault的答案并确保Tomcat的<Connectors />不使用javax.net.ssl属性,则为默认密钥管理器设置密钥库可能不是结束世界。 HttpsURLConnection只会通过它向要求它的服务器进行身份验证(服务器始终请求客户端证书身份验证),并且要求CA列表中的客户端证书与证书的颁发者匹配。这在实践中可能不是一个大问题。

如果你认为这个问题太大,似乎有undocumented property名为com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory。其文件如下:

  

在BindingProvider.getRequestContext()上设置此属性以启用   HttpsURLConnection.setSSLSocketFactory(SSLSocketFactory的)。该物业   设置如下:

     

SSLSocketFactory sslFactory = ...;映射ctxt =   ((BindingProvider)代理).getRequestContext();   ctxt.put(SSL_SOCKET_FACTORY,sslFactory);

     

此属性是实验性的,如有更改,恕不另行通知   在未来。