我需要使用“XML签名”标准签署一整份XML文件。一个要求是签名必须放在签名的文件中。
我这样做的方法是使用信封签名。让我困惑的是签名元素放置的实际要求。当查看示例时,似乎最常见的方法是将签名元素作为根元素的子元素,并使其成为它的最后一个子元素,如下所示:
<?xml version="1.0"?>
<myRootElement>
<someChildElement></someChildElement>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
<ds:Reference URI="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
</myRootElement>
我想知道的是:当涉及到放置时,确切的要求是什么?它必须被放置为根元素的子元素,还是允许它只是根元素的十进制?像这样:
<?xml version="1.0"?>
<myRootElement>
<someChildElement>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
<ds:Reference URI="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
</someChildElement>
</myRootElement>
我试图从规范本身理解这一点,但我未能做到这一点(可能是因为英语不是我的母语)。我将感谢您对此的意见!提前感谢!
当我们阅读标准时,我们发现以下定义:
Signature, Enveloped签名位于包含签名作为元素的XML内容之上。该内容提供根XML文档元素。显然,封装签名必须注意不要在计算SignatureValue时包含自己的值。
它基本上说封装签名必须是被签名元素的子元素。
如果您使用嵌入签名对某个深埋的节点进行签名,则签名块将进入该节点。