1

我收到了一个示例 xades 签名,我必须使用 xades4j(“像模板”)来复制它。

示例签名是这样的(摘录):

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="xmldsig-qualifyingproperties-yada-yada">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
        <ds:Reference URI="#xmldsig-signedproperties-yada-yada">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
            <ds:DigestValue>yada-yada-yada-yada-yada-yada-yada</ds:DigestValue>
        </ds:Reference>
(...)

我知道这个引用不符合 xades,因为那里没有属性 Type。

我的问题是该参考中的转换。我无法找到如何使用 xades4j 设置此选项。这可以做到吗?

另外,我不知道这是否有意义,因为在签名顶部,它说规范化方法是一种,然后在签名属性参考中它说规范化方法是另一种......我读对了吗?

4

1 回答 1

1

您不能在签名的属性参考上设置转换。这是出于以下两个原因:

  1. 不确定需求 - 被签名的资源(实际签名的属性元素)实际上是由 xades4j 生成的,因此允许外部控制没有多大意义。
  2. 安全性 - 不允许任意转换,因为库需要确保引用指向SignedProperties元素。

可能唯一可以使用的转换是规范化,但 XML-DSIG 已经指定如果取消引用的资源是节点集,则必须在使用C14N作为默认算法进行摘要之前对其进行规范化,xades4j/santuario 将使用该算法。在您的示例中,算法是相同的,不同之处在于它在摘要生成中包含注释节点。

至于有 2 个规范化算法,这是因为它们是不同的:引用转换中的一个应用于取消引用该数据对象的结果。另一方面,顶部的那个指定了在SignedInfo元素上使用的规范化算法,以获取实际的签名输入(八位字节流)

于 2014-09-11T21:42:38.310 回答