1

我正在使用 CXF ws secuirty 创建客户端以将 WS 安全 SOAP 信封发送给第三方。当我从本地 Tomcat 服务器发送请求时,我收到 200 响应,但是,当我部署到 websphere 时,我收到 500 响应。我比较了 Tomcat 和 Websphere 的信封和日志。一切都匹配(签名算法、签名提供者、X509 证书)。当我与第三方交谈时,他们说 RSA 签名无效。我能找到的唯一区别是“用密钥签名”日志。在 websphere 上,密钥似乎由不同的包提供。这是问题吗?如果是这样,我该如何解决?

Websphere 日志:

org.apache.jcp.xml.dsig.internal.dom.DOMSignatureMethod - Signature provider:BC version 1.4
org.apache.jcp.xml.dsig.internal.dom.DOMSignatureMethod - Signing with key: com.ibm.crypto.provider.RSAPrivateCrtKey
org.apache.jcp.xml.dsig.internal.dom.DOMSignatureMethod - JCA Algorithm: SHA256withRSA

Tomcat 日志(我删除了一些值):

org.apache.jcp.xml.dsig.internal.dom.DOMSignatureMethod - Signature provider:BC version 1.4
org.apache.jcp.xml.dsig.internal.dom.DOMSignatureMethod - Signing with key: RSA Private CRT Key
                modulus: --removed value--
        public exponent: --removed value--
       private exponent: --removed value--
                 primeP: --removed value--
                 primeQ: --removed value--
         primeExponentP: --removed value--
         primeExponentQ: --removed value--
         crtCoefficient: --removed value--
org.apache.jcp.xml.dsig.internal.dom.DOMSignatureMethod - JCA Algorithm: SHA256withRSA
4

1 回答 1

0

我找到了。Websphere 中的默认设置是让 WS-Security 符合 BSP(基本安全提供程序)。根据我阅读的一篇博客文章(仍然需要做一些研究),启用此功能后,附加信息会添加到请求的 KeyInfo 中。您可以通过将此代码添加到传出端口来在客户端禁用它。(将“端口”替换为您的端口名称)。

Map<String, Object> ctx = ((BindingProvider)port).getRequestContext();
ctx.put(WSHandlerConstants.IS_BSP_COMPLIANT, "false");
于 2015-02-03T19:38:20.773 回答