4

我编写了一个通过 jaxws 连接到 SSL Web 服务(包括客户端证书)的应用程序。为此,我有一个 wstrust.jks,其中包含 ws 的受信任根证书,而 client.p12 是连接到 ws 时要使用的客户端证书。然后,我创建了一个自定义 SSLSocketFactory,以便能够在连接到 ws 期间使用我的 wstrust.jks 和 client.12。我通过以下方式告诉 jaxws 使用我的实现:

[javax.xml.ws.BindingProvider].getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, customSSLSocketFactory);

如果我将它作为独立的 java 应用程序运行,一切都会像魅力一样工作。但是,当我在部署为在 Tomcat 下运行的 war 文件的 Java bean (JSF) 中使用相同的技术时,我收到“PKIX 路径构建失败”错误。

但是,如果我在启动 Tomcat(通过 -Djavax.net.ssl.* 参数)时通过 JAVA_OPTS 配置 SSL,我可以让它工作。

所以我的问题:

我如何(或有可能)让我的自定义 SSLSocketFactory 技术在 Java bean 中工作?

我想当tomcat将自己包裹在我的应用程序中时,当作为bean运行时,它的工作方式不同,我希望使用自定义的SSLSocketFactory不受尊重......

感谢您对此的任何意见!

/托比

4

1 回答 1

2

解决了。如果有人有同样的问题,这里是如何。而不是通过以下方式设置我的自定义工厂:

[javax.xml.ws.BindingProvider].getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, customSSLSocketFactory);

我不得不设置它:

HttpsURLConnection.setDefaultSSLSocketFactory(customSSLSocketFactory);

否则它似乎被忽略了。

/托比

于 2010-08-27T07:00:47.000 回答