从 Java bean 到 Web 服务的 SSL 连接问题

Posted

技术标签:

【中文标题】从 Java bean 到 Web 服务的 SSL 连接问题【英文标题】:SSL Connection problem to web service from Java bean 【发布时间】:2011-04-04 08:18:18 【问题描述】:

我编写了一个通过 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 下运行的战争文件的 Java bean (JSF) 中使用相同的技术时, 我收到“PKIX 路径构建失败”-错误。

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

所以我的问题:

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

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

感谢您对此的任何意见!

/托比

【问题讨论】:

【参考方案1】:

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

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

我不得不设置它:

HttpsURLConnection.setDefaultSSLSocketFactory(customSSLSocketFactory);

否则它似乎会被忽略。

/托比

【讨论】:

以上是关于从 Java bean 到 Web 服务的 SSL 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

SSL 证书和浏览器到 Web 服务器的连接

如何通过java程序来加载客户端证书进行ssl连接?

云服务器(uCloud)部署java web项目 apacheHTTPS转发到tomctHTTPS

Java 使用 SSL 握手失败连接到 SOAP Web 服务

如何通过 SSL 实现 Web 服务到 Web 服务的通信?

web项目http如何改成https