【问题标题】:.NET doesn't support non-standard XMLDSIG signature element names.NET 不支持非标准 XMLDSIG 签名元素名称
【发布时间】:2012-03-11 09:32:03
【问题描述】:

我正在尝试实现需要封装 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 类创建 元素
  2. 我操作 DOM 以删除 并将元素重新创建为

但似乎 .NET 无法验证传入的 ,即使我将传入元素重命名回

我已经多次阅读过 XMLDSIG 规范,尽管他们的所有示例都使用 ,但它似乎并不特别需要这个元素名称,即使对于封装转换也是如此。那么这是 SignedXml 中的一个错误,即当 XMLDSIG 规范中没有这样的要求时,它只支持这个单个元素名称?

【问题讨论】:

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


    【解决方案1】:

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

    1. 将 XML 加载到 XmlDocument 中
    2. 找到
    3. 创建新元素
    4. 的所有子级移动到
      • 注意不要干扰 的空格或命名空间上下文。
    5. 替换为
    6. 使用 .NET SignedXml 类验证签名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 2013-04-07
      相关资源
      最近更新 更多