【问题标题】:Assign XML Signature to a child node of your XMLDocument in .net将 XML 签名分配给 .net 中 XMLDocument 的子节点
【发布时间】:2018-08-21 15:22:42
【问题描述】:

是否可以将封装的签名分配为与您签署的 XML 文档不同的命名空间中的子子项?

例如:

<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="myNamespace">
  <Header>
    <head:sgntr xmlns:head="myHeader"></head:sgntr>
  </Header>
  <Data>
  <a:DataEntry>some data</a:DataEntry>
  <a:DataEntry>some data</a:DataEntry>
 </Data>
</Message>

使用规范化方法 XmlDsigC14NTransform 计算您的签名,然后将其放在 sgntr 节点中。我面临的问题是第 3 方软件无法验证我的 XML,如果我将签名替换为 XML 文档的最后一个节点,第 3 方可以成功验证它。

【问题讨论】:

  • 请参阅以下帖子,其中包含命名空间为“S”的信封和命名空间为“ds”的签名:stackoverflow.com/questions/46722997/…
  • 您应该添加更多关于为什么第 3 方软件无法验证 XML 的信息。他们使用什么规格?
  • 第三方是客户和 XML ValidatorBuddy,DigestValue 是正确的,但 SignatureValue 不是。我们找到了一个解决方案/解决方法,我将在这个问题上发布。

标签: c# xml digital-signature xml-signature canonicalization


【解决方案1】:

问题是在消息的根和签名最终所在的节点之间定义的命名空间前缀在规范化 SignedInfo 时未被考虑。 SignatureValue 是在 SignedInfo 上计算的,因此有效的解决方案是在 SignedInfo 的 XMLDocument 根中添加未声明的命名空间。这是通过覆盖 XmlDsigC14NTransform:GetOutput(...) 来完成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多