我正面临着XWS Security的两难境地。 我有一条肥皂消息,我想用HMAC算法签名。 我的policy.xml看起来 `
<xwss:Sign includeTimestamp="true" >
<xwss:X509Token certificateAlias="client" keyReferenceType="Identifier"
encodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" />
<xwss:CanonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" disableInclusivePrefix="true"/>
<xwss:SignatureMethod algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"/>
<xwss:SignatureTarget type="xpath" value=".//SOAP-ENV:Body">
<xwss:DigestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<xwss:Transform algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" disableInclusivePrefix="true"/>
</xwss:SignatureTarget>
</xwss:Sign>
`
我还创建了一个包含私钥和证书的JKS文件。
但是当我开始签署我的消息时,我收到了这个错误:
Caused by: javax.xml.crypto.dsig.XMLSignatureException: java.security.InvalidKeyException: key must be SecretKey
at org.jcp.xml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:400) ~[na:1.7.0_79]
at com.sun.xml.wss.impl.dsig.SignatureProcessor.sign(SignatureProcessor.java:708) ~[xws-security-3.0.jar:3.0-FCS]
... 99 common frames omitted
我在互联网上发现的几乎所有文件都说SecretKey仅用于加密/解密邮件。
为了说明这一点:当我使用RSA算法时,一切都进展顺利。
有人可以向我解释:为什么HMAC正在寻找一个SecretKey?
非常感谢