数字签名XML文档的部分

时间:2009-06-23 10:55:03

标签: xml cryptography digital-signature xml-signature signedxml

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

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

我想对标题和消息元素进行数字签名,并将签名添加到页脚元素。

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

6 个答案:

答案 0 :(得分:3)

您应该能够向签名添加XPath-Transform。看起来应该是这样的:

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

我不熟悉XPath,但是应该很容易制定一个排除Footer-element的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>

您可以使用Enveloped Signature Transform(第一种情况)或签署signedEnvelope元素(第二种情况)来处理它。

答案 1 :(得分:2)

答案 2 :(得分:2)

微软的合作伙伴对此非常有帮助。它们允许您为XML(以及所有其他平台)添加digital signatures。我建议检查他们的产品,这叫做cosign。

答案 3 :(得分:1)

答案 4 :(得分:0)

为什么不遵循针对XML签名的w3建议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#中找到。

答案 5 :(得分:0)

我看到这篇文章很老了,但也许有人现在有同样的需求。你需要的是某种类似XMLDSIG中的封装签名。不同之处在于,在XMLDSIG中,您必须将签名数据包含在签名节点中。

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

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

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

您可以在XAdES .NET Project

中找到它

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

问候。