添加对keyInfo的引用的事情

时间:2012-09-06 18:43:13

标签: xmlsec xades4j

我需要在我的cades签名中引用Keyinfo(在每种情况下),我在SignerBES.java中看到xades4j类声明中的进程引用:

 Map<DataObjectDesc, Reference> referenceMappings = this.dataObjectDescsProcessor.process(
            signedDataObjects,
            signature);

生成keyinfo dataStructure。

您能否建议我在哪里准确创建Reference对象以获取对keyingo对象的引用?

谢谢,

P.S。我看到xades4j可以选择以对keyinfo元素进行签名的方式进行设置,但是我看到这个关于1.2.0版本的错误报告(http://code.google.com/p/xades4j/issues/detail?id=32),我不明白1.3.0是否修复了这个bug < / p>

微米。

2 个答案:

答案 0 :(得分:2)

以下是我为KeyInfo做的事情。

修改SignerBES.java

    this.keyInfoBuilder.buildKeyInfo(signingCertificate, signature);
    /* Add line below */
    signature.getKeyInfo().setId("KeyInfo"); 

使用Transform将DataObjectReference定义为Id = #KeyInfo。

    DataObjectDesc obj2 = new DataObjectReference("#KeyInfo").withTransform(new ExclusiveCanonicalXMLWithoutComments(""));

结果签名:

`</ds:Reference>
<ds:Reference Id="xmldsig-12eced92-9bab-4aa4-b38d-a0646c0b57b4-ref1" URI="#KeyInfo">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList=""/></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>6lQav16xHEPBwQANI4gO57OtHxXjmLWa+kJf9gZJRqI=</ds:DigestValue>
</ds:Reference>
`

答案 1 :(得分:0)

目前,某些基本签名选项有provider,可让您签署签名证书。当您要求签署证书时,xades4j的当前实现实际上会签署整个KeyInfo元素。这不会让你控制变换,我不确定它应该。

我愿意接受有关此问题的建议,因为还有另外一个问题。一种可能的方法是添加一种新类型的DataObjectDesc,其语义是签署KeyInfo或签名证书元素。