.NET不支持非标准XMLDSIG签名元素名称

时间:2012-02-21 02:33:10

标签: .net standards-compliance signedxml xml-dsig

我正在尝试实施一个需要封装XML数字签名(XMLDSIG)的行业规范。我没有遵循示例(<Signature>),而是使用自己的名称作为签名元素:

<xs:element name="ensembleSignature" type="dsig:SignatureType" />
<!-- wish this was:  <xs:element ref="dsig:Signature" />  -->

因此该元素未命名为“Signature”,并且位于域的XML命名空间中,而不是dsig XML命名空间。

通过大量额外工作,我可以在.NET中创建此自定义签名。

  1. 使用.NET SignedXml类创建&lt; dsig:Signature&gt;元件
  2. 我操纵DOM以删除&lt; dsig:Signature&gt;并将该元素重新创建为&lt; myns:ensembleSignature&gt;。
  3. 但似乎.NET无法验证传入的&lt; myns:ensembleSignature&gt;,即使我将传入的元素重命名为&lt; dsig:Signature&gt ;.

    我已多次使用XMLDSIG规范,尽管他们的所有示例都使用&lt; Signature&gt;它似乎没有特别要求这个元素名称,即使对于包络变换也是如此。这是SignedXml中的一个错误,当XMLDSIG规范中没有这样的要求时,它只支持这个单个元素名称吗?

1 个答案:

答案 0 :(得分:0)

在.NET中无法使用非标准元素名称。但签名元素名称不是摘要的一部分,因此您可以删除“自定义”签名元素并添加“标准”签名元素名称(&lt; Signature&gt;)但请注意不要更改任何空格或名称空间。 SignedInfo元素,因为SignedInfo IS 是摘要的一部分。在规范化方法中,我使用空格是重要的,元素的命名空间也是如此。

  1. 将XML加载到XmlDocument
  2. find&lt; customSignature xmlns =“http://b-to-b.com/Namespace”&gt;
  3. 创建新元素&lt; Signature&gt;
  4. 移动&lt; customSignature&gt;的所有子项至
    • 注意不要打扰&lt; SignedInfo&gt;的空格或名称空间上下文。
  5. 替换&lt; customSignature&gt;与&lt;签名&gt;
  6. 使用.NET SignedXml类验证签名