使用com.ibm.crypto.provider.RSAPrivateCrtKey进行WS安全性签名

时间:2015-01-27 17:30:29

标签: soap websphere rsa ws-security xml-dsig

我正在使用CXF ws secuirty创建一个客户端,以便将WS Security 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

1 个答案:

答案 0 :(得分:0)

我找到了。 Websphere的默认设置是让WS-Security符合BSP(Basic Secuirty Provider)。根据我阅读的博客文章(仍然需要做一些研究)启用此功能后,其他信息会被添加到请求的KeyInfo中。您可以通过将此代码添加到传出端口来在客户端中禁用它。 (替换" port"无论你的端口是什么叫。)

Map<String, Object> ctx = ((BindingProvider)port).getRequestContext();
ctx.put(WSHandlerConstants.IS_BSP_COMPLIANT, "false");