我有一个带有消息安全性的WCF Web服务,并使用Netbeans创建的java Web应用程序使用Metro(WSIT + jaxws)来使用它。一切正常使用标准algorithmSuite Basic256,但当我使用Basic256Sha256这是服务的要求时,我得到一个运行时错误,说“SOAPFaultException:验证消息的安全性时发生错误。”。当我查看服务日志时,它说“算法'http://www.w3.org/2000/09/xmldsig#hmac-sha1'不被算法套件Basic256Sha256操作'SymmetricSignature'接受。”问题是我如何更改客户端以使用SHA2(Sha256)。我使用证书作为客户端凭据类型。
WCF绑定:
<!-- MESSAGE SECURITY -->
<binding name="myMessageBinding">
<transactionFlow />
<security defaultAlgorithmSuite="Basic256Sha256"
authenticationMode="SecureConversation"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<secureConversationBootstrap defaultAlgorithmSuite="Basic256Sha256"
authenticationMode="MutualCertificate" requireDerivedKeys="false"
messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireSignatureConfirmation="true" />
</security>
<textMessageEncoding />
<httpTransport />
</binding>
答案 0 :(得分:1)
SecurityAlgorithmSuite.IsSymmetricSignatureAlgorithmSupported返回不受支持的symetric签名错误算法,因为 Basic256Sha256 使用
作为用于签名生成和验证的算法和
作为要应用于签名对象的摘要算法,以创建或验证xml签名的哈希值。
作为
的对称签名有效使用
作为摘要算法。
您的Java客户端似乎没有使用相同的算法来签署SOAP消息,请检查从Java客户端收到的消息中的SignedInfo SignatureMethod元素
算法= “http://www.w3.org/2000/09/xmldsig#hmac-sha1”
确保客户端不使用相同的算法进行签名。