使用封装签名时放置签名

时间:2014-01-14 17:34:45

标签: xml digital-signature xml-signature

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

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

1 个答案:

答案 0 :(得分:2)

在阅读标准时,我们发现以下定义:

  

签名,已开发       签名位于包含签名作为元素的XML内容之上。内容提供了根XML文档元素。显然,封装签名必须注意不要在计算SignatureValue时包含它们自己的值。

它基本上表示被包围的签名必须是被签名元素的子元素。

如果您使用嵌入式签名对某个深度埋藏的节点进行签名,则签名块将进入该节点。