摘要:我有一个通过HTTPS调用远程Web服务的SAAJ客户端。需要通过证书进行客户端和服务器身份验证。我可以在IDE中运行JUnit测试时成功调用该服务,但在JBoss中运行时无法连接。
密钥库/信任库配置详细信息:在IDE和JBoss中,我通过系统属性设置密钥库和信任库:javax.net.ssl.keyStore
,javax.net.ssl.keyStorePassword
,{{1 },javax.net.ssl.trustStore
日志记录配置:在JBoss中,我通过系统属性javax.net.ssl.trustStorePassword
启用了SSL调试日志记录。我还通过logging.properties文件启用了CXF日志记录。
JBoss SSL记录输出摘要:
JBoss CXF记录输出摘要:
CXF日志记录显示POST通过Conduit null.http-conduit发送到服务
CXF记录显示此管道“已配置为普通http”,具有“无信任决策者”,并且具有“无认证供应商”(我不完全确定所有这些意味着什么,但这听起来相关)
堆栈跟踪:这是我正在获得的实际堆栈跟踪
javax.net.debug=SSL
其他信息
我尝试过的事情:我一直专注于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.xml
或jbossws-cxf.xml
配置文件,其中包括密钥库和信任库配置。这没用,我甚至不能说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集成是这个问题,但我无法以这种方式修改部署环境。我需要找出另一种解决方案。
答案 0 :(得分:0)
我会选择系统属性(或者至少知道系统的配置),因为它们可能会覆盖您在部署中指定的任何内容。
在部署环境中使用了哪个版本的cxf?您是否在部署环境中有关于cxf配置的任何信息?从文档(http://cxf.apache.org/docs/ws-security.html)中,我可以看到您需要为cxf 2.0.x或更早版本配置WSS4J拦截器,因此您可以检查部署环境是否正常。