2

我有一个类似于以下结构的 XML 文档

<envelop>
    <header>blaa</header>
    <message>blaa blaa</message>
    <footer></footer>
</envelop>

我想对 header 和 message 元素进行数字签名,并将签名添加到 footer 元素。

如何签署元素,然后验证签名(使用 .net c#)?

4

6 回答 6

3

您应该能够将 XPath-Transform 添加到签名中。它应该看起来像这样:

       <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
         <XPath xmlns:dsig="&dsig;">
         ...
         </XPath>
       </Transform>

我不精通 XPath,但应该很容易制定一个排除页脚元素的 XPath 表达式。(但请注意,XPath 是 XML-DSIG 的可选部分,因此并非所有实现都支持它)。

或者,如果您可以将文档重组为

<envelop>
  <header>blaa</header>
  <message>blaa blaa</message>
  <Signature></Signature>
</envelop>

或者

<envelop>
  <signedEnvelope>
    <header>blaa</header>
    <message>blaa blaa</message>
  </signedEnvelope>
  <Signature></Signature>
</envelop>

您可以通过使用信封签名转换(第一种情况)或通过签署 signedEnvelope 元素(第二种情况)来处理它。

于 2009-06-23T12:58:04.950 回答
2

有一个微软合作伙伴可能对此非常有用。它们允许您为 XML(以及所有其他平台)添加数字签名。我建议检查他们的产品,它被称为 cosign。

于 2011-01-26T20:03:33.837 回答
2

阅读此http://msdn.microsoft.com/en-us/library/ms229745.aspx

于 2009-06-23T10:58:34.737 回答
1

http://social.msdn.microsoft.com/Search/en-US/?query=digital%20signature%20xml&ac=3

于 2009-06-23T11:00:44.547 回答
0

为什么不遵循 w3 的 XML 签名建议http://www.w3.org/2000/09/xmldsig#它有一个基本结构:

<Signature>
   <SignedInfo>
      <SignatureMethod />
      <CanonicalizationMethod />
      <Reference>
         <Transforms>
         <DigestMethod>
         <DigestValue>
      </Reference>
      <Reference /> etc.
   </SignedInfo>
   <SignatureValue />
   <KeyInfo />
   <Object />
</Signature>

如果您想要更高级的功能,请阅读 XAdES - 我认为它在 c# 中可用。

于 2009-06-24T08:47:53.340 回答
0

我看到这篇文章很旧,但也许现在有人有同样的需求。您需要的有点像 XMLDSIG 中的封装签名。不同之处在于,在 XMLDSIG 中,您必须在Signature节点中包含签名数据。

如果你想这样做,你必须自己实现它。

我参与了一个开发库来为 .NET Framework 提供 XAdES 支持的项目。

我们刚刚发布了 1.0 版,它提供了对 XAdES-BES 的早期支持。

您可以在XAdES .NET 项目中找到它

我希望源代码可以以某种方式帮助你。

问候。

于 2010-12-10T19:09:13.567 回答