当前位置:  开发笔记 > Android > 正文

.NET签名的XML前缀

如何解决《.NET签名的XML前缀》经验,为你挑选了2个好方法。

有没有办法在签名XML文档的签名(.Net中的SignedXml类)上设置前缀?

所以代替:


小智.. 8

它无法完成.如果在签名后修改XML ,则可能无法对其进行验证,这在上面的示例中就是这种情况.IMO这是MSFT数字签名实现中的一个缺陷,您将不得不忍受.

很多人会说没有理由这样做,而且技术上是正确的.但是当你与一个巨大的供应商(即州政府或银行)打交道时,祝他们在最后改变它.大多数参考实现包括它.

更新:签名对SignedInfo元素中的所有内容进行签名,因此如果您在事后更新该元素,则签名不再有效.你已经"篡改"了这条消息.



1> 小智..:

它无法完成.如果在签名后修改XML ,则可能无法对其进行验证,这在上面的示例中就是这种情况.IMO这是MSFT数字签名实现中的一个缺陷,您将不得不忍受.

很多人会说没有理由这样做,而且技术上是正确的.但是当你与一个巨大的供应商(即州政府或银行)打交道时,祝他们在最后改变它.大多数参考实现包括它.

更新:签名对SignedInfo元素中的所有内容进行签名,因此如果您在事后更新该元素,则签名不再有效.你已经"篡改"了这条消息.



2> Eric Rosenbe..:

首先,没有任何充分理由这样做.这两种形式在功能上是等同的.任何表现良好的XML处理器都将完全相同地处理它们.所以,除非你正在试图说服一个不正确地实现XML命名空间的应用程序,它的更好(IMO)只是独自离开默认的形式.(即使在这种情况下,它会更好,如果可能的话,要得到,而不是固定的应用程序错误.)

这就是说,你可以手动设置在由SignedXml.GetXml()和使用XPath这样它的子元素返回的XmlElement前缀:

XmlElement signature = signedXml.GetXml();
foreach (XmlNode node in signature.SelectNodes(
    "descendant-or-self::*[namespace-uri()='http://www.w3.org/2000/09/xmldsig#']"))
{
    node.Prefix = "ds";
}


我同意它是相同的,它应该工作.但是,我不确定如果没有ds前缀,我是否能够让另一方工作.生成sig之后更改前缀的简单行为是否会导致验证失败?
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有