我需要使用"XML Signature"标准来签署整个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>
我尝试从规范本身中理解这一点,但我没有这样做(也许是因为英语不是我的母语)。我很感激您对此的意见!提前谢谢!
答案 0 :(得分:2)
在阅读标准时,我们发现以下定义:
签名,已开发 签名位于包含签名作为元素的XML内容之上。内容提供了根XML文档元素。显然,封装签名必须注意不要在计算SignatureValue时包含它们自己的值。
它基本上表示被包围的签名必须是被签名元素的子元素。
如果您使用嵌入式签名对某个深度埋藏的节点进行签名,则签名块将进入该节点。