我收到了一个示例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引用中它说规范化方法是另一个...我在读这是正确的吗?
答案 0 :(得分:0)
您无法在已签名的属性引用上设置转换。这是出于以下两个原因:
SignedProperties
元素。可能唯一可以使用的转换是规范化,但XML-DSIG已经指定如果解除引用的资源是一个节点集,则必须在使用C14N作为默认算法进行摘要之前进行规范化,xades4j / santuario将使用。在您的示例中,算法是相同的,区别在于它包含摘要生成上的注释节点。
至于有2个规范化算法,这是因为它们是不同的:参考变换中的那个算法应用于解除引用该数据对象的结果。另一方面,顶部的那个指定在 SignedInfo 元素上使用的规范化算法来获取实际的签名输入(八位字节流)