0

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

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

生成keyinfo后的dataStructure。

你能建议我把对象的创建放在哪里以Reference获得对 keyingo 对象的引用吗?

谢谢,

PS我看到xades4j可以选择设置为签署keyinfo元素,但我看到这个关于1.2的错误报告( http://code.google.com/p/xades4j/issues/detail?id=32 ) .0 版本,我不明白 1.3.0 是否修复了这个错误

M。

4

2 回答 2

3

这是我为 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>
`
于 2012-12-13T23:34:13.500 回答
0

目前有一些基本签名选项的提供程序,使您能够签署签名证书。当您要求签署证书时,xades4j 的当前实现实际上签署了整个 KeyInfo 元素。这不会让你控制变换,我不确定它应该。

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

于 2012-09-07T19:09:51.947 回答