我需要在我的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>
微米。
答案 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或签名证书元素。