xades4j:如何使用signedproperties引用中的转换生成签名

时间:2014-09-11 14:17:01

标签: xades4j xml-dsig

我收到了一个示例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设置此选项。可以这样做吗?

另外,我不知道这是否有意义,因为在签名顶部,它表示规范化方法是一个然后在signedproperties引用中它说规范化方法是另一个...我在读这是正确的吗?

1 个答案:

答案 0 :(得分:0)

您无法在已签名的属性引用上设置转换。这是出于以下两个原因:

  1. 不确定需要 - 正在签名的资源(实际签名的属性元素)实际上是由xades4j生成的,因此允许外部控制没有多大意义。
  2. 安全性 - 不允许任意转换,因为库需要确保引用指向SignedProperties元素。
  3. 可能唯一可以使用的转换是规范化,但XML-DSIG已经指定如果解除引用的资源是一个节点集,则必须在使用C14N作为默认算法进行摘要之前进行规范化,xades4j / santuario将使用。在您的示例中,算法是相同的,区别在于它包含摘要生成上的注释节点。

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