mjm*_*nto 11 .net xml xml-signature
有没有办法在签名XML文档的签名(.Net中的SignedXml类)上设置前缀?
所以代替:
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#>
...
</Signature>
Run Code Online (Sandbox Code Playgroud)
我可以有以下内容:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#>
...
</ds:Signature>
Run Code Online (Sandbox Code Playgroud)
小智 8
它无法完成.如果在签名后修改XML ,则可能无法对其进行验证,这在上面的示例中就是这种情况.IMO这是MSFT数字签名实现中的一个缺陷,您将不得不忍受.
很多人会说没有理由这样做,而且技术上是正确的.但是当你与一个巨大的供应商(即州政府或银行)打交道时,祝他们在最后改变它.大多数参考实现包括它.
更新:签名对SignedInfo元素中的所有内容进行签名,因此如果您在事后更新该元素,则签名不再有效.你已经"篡改"了这条消息.
首先,没有任何充分理由这样做.这两种形式在功能上是等同的.任何表现良好的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";
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7793 次 |
最近记录: |