2014-01-14 48 views
3

我需要使用"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> 

我试图从规范本身理解这一点,但我没有这样做(也许因为英文不是我的母语)。我很感谢你对此的意见!提前致谢!

回答

2

当我们阅读的标准,我们发现了以下定义:

签名,笼罩 签名是在包含签名作为元素的XML内容。内容提供了根XML文档元素。显然,包裹签名必须注意不要在计算SignatureValue时包含自己的值。

它基本上说封装的签名必须是被签名的元素的孩子。

如果签署一些嵌入式签名的深埋节点,签名块将进入该节点。

+0

为了确保:这意味着我的第二个示例根据标准无效? –

+0

在你的第二部分中,对文档内容进行签名,因此应该将其置于myRootElement下,据我了解。 –