使用WS安全性时,STR-Transform转换算法如何适用于XML签名?我需要在SOAP消息上签署用于签名的SecurityTokenReference,这是安全令牌的必需转换。我使用x509证书进行签名,因此安全令牌是此证书。但是,在消息中我只需要引用证书指纹。
这是我需要复制的签名结构,我唯一缺少的是对SecurityTokenReference的签名引用:
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference URI="#Timestamp_C1Ih1AB1vpPT5uG2">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<dsig:DigestValue>fVSyToUO8yS131cV8oT1h6fa69Jvtt+pKFeP4BFf1P4=</dsig:DigestValue>
</dsig:Reference>
<!-- Other signature references -->
<dsig:Reference URI="#str_U1sjQ5j8JtKnObLk">
<dsig:Transforms>
<dsig:Transform Algorithm="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform">
<wsse:TransformationParameters>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</wsse:TransformationParameters>
</dsig:Transform>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<dsig:DigestValue>gRa3zakGn13XISoKpekB3zl0iDqb/LmNy7+aMDtzKIY=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>ptO...E9Q==</dsig:SignatureValue>
<dsig:KeyInfo>
<wsse:SecurityTokenReference
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsse11:TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
wsu:Id="str_U1sjQ5j8JtKnObLk">
<wsse:KeyIdentifier
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
ValueType="http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1">h5...ow=</wsse:KeyIdentifier>
</wsse:SecurityTokenReference>
</dsig:KeyInfo>
</dsig:Signature>
有人可以解释一下如何为这样的令牌做签名吗?对算法的逐步描述或使用任何语言/库的示例都会很好。
In this document is the description of the transformation,来自第38页,但我无法理解如何在实践中应用它。
答案 0 :(得分:0)
好的,在检查具有工作服务示例的Oracle WebLogic服务器调试和详细日志文件并设置标志-Dweblogic.xml.crypto.dsig.debug=true -Dweblogic.xml.crypto.dsig.verbose=true -Dweblogic.xml.crypto.keyinfo.debug=true -Dweblogic.xml.crypto.keyinfo.verbose=true -Dweblogic.wsee.verbose=* -Dweblogic.wsee.debug=*
(更多信息here,here,{{ 3}}和here),感谢上帝对安全令牌如何被解除引用有一个很好的洞察力。基本上,拥有SecurityTokenReference
的x509证书({1}},会以KeyIdentifier
取消引用:
BinarySecurityToken
需要注意的一些重要事项是:
<wsse:BinarySecurityToken xmlns="" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3">CertificateBase64String</wsse:BinarySecurityToken>
的内容由BinarySecurityToken
的{{1}}定义。在这种情况下,TokenType
的文本是由SecurityTokenReference
元素引用的x509证书,编码为base64字符串。BinarySecurityToken
仅包含KeyIdentifier
属性。因此,它不应包含BinarySecurityToken
属性,也不应包含ValueType
所具有的EncodingType
属性。Id
的相同名称空间前缀。此外,此前缀的命名空间也包含在标记中。SecurityTokenReference
所以基本上整个SecurityTokenReference
元素被新的xmlns=""
替换,这是一个规范化和散列(获取其摘要值)的元素。请注意它是规范化的并且按原样进行消化,因此如果通过删除空SecurityTokenReference
命名空间或前缀命名空间或通过更改命名空间前缀来简化XML,操作可能会提供错误的结果。
示例BinarySecurityToken
已使用算法&#34; here&#34;进行规范化,因此在.NET中,使用摘要算法获取DigestValue&#34; {{3 &#34;,足以做到这一点:
xmlns