我想创建一个包含多个引用相同数据的独立签名的文件。我希望将数据存储在输出 XML 文件中,作为ds:Signature
元素的兄弟,如下所示(仅包含多个ds:Signature
元素):
<?xml version="1.0" encoding="UTF-8"?>
<internally-detached>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#data">
<ds:DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue/>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue/>
</ds:Signature>
<document Id="data">
<title>title</title>
<author>writer</author>
<date>today</date>
<content>
<para>First paragraph</para>
<para>Second paragraph</para>
</content>
</document>
</internally-detached>
来源:https ://msdn.microsoft.com/en-us/library/ms759193(v= vs.85).aspx(我知道该网站没有提及 XAdES 标准)。
我尝试将此应用于有效的封装 XAdES 签名并将引用的ds:Object
节点放在ds:Signature
元素之外,但验证软件返回错误(未找到引用的节点),xades4j 验证模块在遇到</internally-detached>
标记后失败。
XAdES 是否可以实现内部分离的签名?如果是这样,我该如何实现?
我知道当数据存储在单独的文件中时,可能会有多个签名:每个签名的 SignedProperties 元素必须包含带有 ObjectReference 的 SignedDataObjectProperties,并且 SignedInfo 的 Reference 元素中的 URI 应该指向该文件。