数字签名XML文档的部分
-
06-07-2019 - |
题
我有一个XML文档,其结构类似于以下
<envelop>
<header>blaa</header>
<message>blaa blaa</message>
<footer></footer>
</envelop>
我想对标题和消息元素进行数字签名,并将签名添加到页脚元素。
如何签署元素然后验证签名(使用.net c#)?
解决方案
您应该能够向签名添加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元素(第二种情况)来处理它。
其他提示
微软的合作伙伴对此非常有帮助。它们允许您为XML(以及所有其他平台)添加数字签名。我建议检查他们的产品,这叫做cosign。
为什么不按照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#中是可用的。
我看到这篇文章很老了,但也许有人现在有同样的需求。你需要的是某种类似XMLDSIG中的封装签名。不同之处在于,在XMLDSIG中,您必须将签名数据包含在签名节点中。
如果你想这样做,你必须自己实现它。
我参与了一个开发库的项目,以便为.NET Framework提供XAdES支持。
我们刚刚发布了1.0版,它为XAdES-BES提供了早期支持。
您可以在 XAdES .NET Project 中找到它
我希望源代码能以某种方式帮助你。
问候。
不隶属于 StackOverflow