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

发布于 2025-01-07 11:38:18 字数 859 浏览 1 评论 0原文

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

<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 规范中没有这样的要求?

I'm trying to implement an industry spec that requires enveloped XML digital signatures (XMLDSIG). Instead of conforming to the examples (<Signature>) my spec uses its own name for the signature element:

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

So the element isn't named 'Signature' and is in the domain's XML namespace instead of the dsig XML namespace.

With a lot of extra work I can create this custom signature in .NET.

  1. Using the .NET SignedXml class I create <dsig:Signature> element
  2. I manipulate the DOM to remove <dsig:Signature> and recreate the element as <myns:ensembleSignature>.

But it seems .NET can't verify the incoming <myns:ensembleSignature>, even if I rename the incoming element back to <dsig:Signature>.

I've been over the XMLDSIG spec many times, and although all their examples use <Signature> it doesn't seem to specifically require this element name, even for enveloped transforms. So is this a bug in SignedXml that it only supports this single element name when there is no such requirement in XMLDSIG spec?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

看海 2025-01-14 11:38:18

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

  1. 将 XML 加载到 XmlDocument 中
  2. 查找
  3. 创建新元素<签名>
  4. 移动的所有子项到
    • 小心不要干扰的空格或命名空间上下文。

  5. 替换带有<签名>
  6. 使用 .NET SignedXml 类验证签名

Using a non-standard element name isn't possible in .NET. But the signature element name isn't part of the digest, so you can remove the 'custom' signature element and add a 'standard' signature element name (<Signature>) but be careful not to change any whitespace or namespaces in the SignedInfo element, because SignedInfo IS part of the digest. In the canonicalization method I am using whitespace is significant, and so is the namespace of the elements.

  1. load XML into XmlDocument
  2. find <customSignature xmlns="http://b-to-b.com/Namespace">
  3. create new element <Signature>
  4. move all children of <customSignature> to
    • Be careful not to disturb whitespace or namespace context of <SignedInfo>.
  5. replace <customSignature> with <Signature>
  6. verify signature using .NET SignedXml class
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文