2009-06-23 131 views
2

的数字签名I部分有具有类似于以下一个XML文档

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

我想进行数字签名的报头和消息元素和所述签名添加到所述页脚元素结构的XML文档。

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

回答

3

您应该能够添加一个XPath的变换来签名。它应该是这个样子:

 <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元素处理它(第二种情况)。

+0

嗨Rasmus,我没有选择重新构建XML格式是由第三方应用程序决定的。我将研究XPath转换。 谢谢 – Eros 2009-06-23 15:40:02

0

为什么不遵循W3 recomendation用于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#avalible。

0

我看到这篇文章很旧,但也许有人现在有同样的需要。您需要的是某种程度上像XMLDSIG中的封装签名。不同的是,在XMLDSIG中,您必须将签名数据包含在签名节点中。

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

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

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

可以在XAdES .NET Project

希望的源代码可以帮助你以某种方式找到它。

问候。

2

有一个微软合作伙伴可能对此非常好。它们允许您为XML(以及所有其他平台)添加digital signatures。我建议检查他们的产品,这就是所谓的cosign。