提问者:小点点

使用封装签名时放置签名


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

我试图从规范本身理解这一点,但我未能做到这一点(可能是因为英语不是我的母语)。我将感谢您对此的意见!提前感谢!


共1个答案

匿名用户

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

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

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

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