业务场景:
- 更新可以包含包。
- 包可以包含更改。
- 每个包裹都必须经过某人的批准。
- 批准后,不得更改套餐。
要执行更新,必须具有 100% 批准的软件包。
发展思路:
- 所有数据均保存为 XML 文件。
- Xml“包”元素将在批准后签署。
Problem:
无论我尝试什么并谷歌搜索,所有examples http://msdn.microsoft.com/en-us/library/ms229745.aspx总是关于签名整个文件或签署子元素整个文档使用相同的密钥。但我想用一个签名每个子元素(包)不同的key,批准包的人的密钥。所以我需要每个元素一个签名。虽然所有 .NET Framework 功能seem为了支持这一点,我得到了奇怪的行为。例如,在对元素进行签名时,您需要提供元素的 URI。如果我为所有包提供相同的 ID,它会验证,如果我为每个元素提供不同的 ID 并在各自的签名中引用此 ID,我只能验证第一个。 ID 的想法首先对我的场景没有意义,因为我的签名与我的元素处于 1:1 关系。
我可以发布代码,但在发布之前,我想知道这样的事情是否可能?我没有看到任何会阻止我想做的事情,但我也没有看到任何迹象表明它should工作也可以。有没有人这样做过,或者有人可以向我指出我尚未找到的资源吗?或者有人有更好的想法如何使用标准来实现要求?
当然可以使用不同的密钥对同一 XML 文档中的不同元素进行签名。这基本上添加了具有不同内部引用的多个签名(#<ID>
) 到文档。
需要带有 ID 的内部参考,没有标准支持的解决办法。具有空或缺失 URI 的引用不会not指示要签署父元素,但要签署完整的文档。
如果您无法将 ID 添加到包中,您可以使用非标准方法来实现您的目标,即有效地将每个包视为独立的 XML 文档并将引用 URI 保留为空。但这意味着包含所有包的 XML 文档只能由您的程序进行验证,因为在验证之前它必须将 XML 文档拆分为多个文档。
在 .NET 实现中,如果签名放置在应签名的标签内,则该方法不起作用。这要么是因为我遗漏了某些东西,要么是由于错误。
将签名直接放在根元素内部的顶层是可行的。
可以在以下位置找到有效的实现:我对你另一个问题的回答 https://stackoverflow.com/a/16519603/572644.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)