无法在JBoss EAP 6.2中通过SSL连接到SOAP服务

时间:2015-03-12 15:12:20

标签: java soap https jboss cxf

摘要:我有一个通过HTTPS调用远程Web服务的SAAJ客户端。需要通过证书进行客户端和服务器身份验证。我可以在IDE中运行JUnit测试时成功调用该服务,但在JBoss中运行时无法连接。

密钥库/信任库配置详细信息:在IDE和JBoss中,我通过系统属性设置密钥库和信任库:javax.net.ssl.keyStorejavax.net.ssl.keyStorePassword,{{1 },javax.net.ssl.trustStore

日志记录配置:在JBoss中,我通过系统属性javax.net.ssl.trustStorePassword启用了SSL调试日志记录。我还通过logging.properties文件启用了CXF日志记录。

JBoss SSL记录输出摘要

  • SSL日志记录不显示WARN或ERROR日志
  • SSL日志记录显示在调用远程服务时建立会话

JBoss CXF记录输出摘要

  • CXF日志记录显示POST通过Conduit null.http-conduit发送到服务

  • CXF记录显示此管道“已配置为普通http”,具有“无信任决策者”,并且具有“无认证供应商”(我不完全确定所有这些意味着什么,但这听起来相关)

堆栈跟踪:这是我正在获得的实际堆栈跟踪

javax.net.debug=SSL

其他信息

  • 我没有直接访问远程Web服务的日志,但我被告知他们“没有显示任何内容”
  • CXF开始发挥作用,因为JBoss使用它。我的项目中没有包含任何CXF依赖项,当我在IDE中运行代码时,它没有使用。

我尝试过的事情:我一直专注于CXF,因为再一次,在我的IDE中执行时,这一切都运行正常,其中CXF没有运行,并且CXF日志显示管道已经“为普通的http配置”吓到了我。我尝试在WAR中包含 Caused by: javax.xml.soap.SOAPException: JBWS024004: SOAP message could not be sent at org.jboss.wsf.stack.cxf.saaj.SOAPConnectionImpl.call(SOAPConnectionImpl.java:124) at my.client.soap.MySAAJClient.invoke(MySAAJClient.java:37) [my-client-0.0.1-SNAPSHOT.jar:] ... 17 more Caused by: org.apache.cxf.transport.http.HTTPException: HTTP response '403: Forbidden' when communicating with https://remote.service.url.here/ at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1542) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1502) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1309) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:627) at org.jboss.wsf.stack.cxf.saaj.SOAPConnectionImpl.call(SOAPConnectionImpl.java:120) ... 19 more jboss-cxf.xmljbossws-cxf.xml配置文件,其中包括密钥库和信任库配置。这没用,我甚至不能说CXF正在看这些文件。

我的问题(已更新)

  • 有没有办法让JBoss / CXF看到这是一个安全连接并使用通过系统属性配置的密钥库/信任库?
  • 我有没有办法指导JBoss(通过jboss-deployment-structur.xml?)为我的部署使用不同的SAAJ实现?

  • 您对我应该研究的其他事情有什么想法吗?


更新1

我相信我已经确认JBoss-CXF集成是个问题。我能够通过修改文件 {JBOSS_HOME} /modules/system/layers/base/org/jboss/ws/saaj-impl/main/module.xml 来删除JBoss的SOAPConnectionImpl。我注释掉了模块依赖项cxf.xml

进行此更改后,我的应用程序能够毫无问题地连接到远程服务。

虽然这表明JBoss-CXF集成是这个问题,但我无法以这种方式修改部署环境。我需要找出另一种解决方案。

1 个答案:

答案 0 :(得分:0)

我会选择系统属性(或者至少知道系统的配置),因为它们可能会覆盖您在部署中指定的任何内容。

在部署环境中使用了哪个版本的cxf?您是否在部署环境中有关于cxf配置的任何信息?从文档(http://cxf.apache.org/docs/ws-security.html)中,我可以看到您需要为cxf 2.0.x或更早版本配置WSS4J拦截器,因此您可以检查部署环境是否正常。