【发布时间】:2014-12-03 16:54:58
【问题描述】:
我正在使用 X509 证书签署 SAML 令牌,并获得看起来不错的签名,除了一个看起来相对较小的问题,但这让我非常头疼。我的签名是这样的:
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#[removed]">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>S4...ku4=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>oav...T7E=</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MII...KFl</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
我需要添加一个命名空间ds,使签名看起来像这样:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#[removed]">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>S4...ku4=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>oav...T7E=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MII...KFl</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
这似乎应该是我在计算签名或将签名块导入现有 XML 文档时可以做的事情,但是,对于我的生活,我无法弄清楚我应该怎么做.我在网上搜索过,发现有几个人遇到了这个问题,但没有找到一个很好的例子来解决这个问题。
【问题讨论】:
-
您的原始版本已经“命名空间”,这要归功于 Signature 元素上的 xmlns 属性。为什么你需要额外的杂乱的殖民名称?
-
不幸的是,接收供应商需要额外的混乱。这当然不是我的选择。
-
这很奇怪,除非您的消费者正在使用一些自制的 XML 解析套件。例如。他们是否坚持前缀也特别是“ds”? OTOH,如果它可以是任何东西 - 即它们实际上正在使用 XML 命名空间感知包 - 那么它可能什么都不是,就像默认规则支持一样。你能问他们为什么他们“需要”不必要的混乱吗?也许可以协商解决方法。
-
您也可以尝试使用 XSLT 样式表 along these lines 对输出进行后处理。但我仍然认为谈判一个明智的解决方案是优越的。
标签: xml saml-2.0 xml-signature