我需要在我的cades签名中对Keyinfo进行引用(在任何情况下),我在SignerBES.java class xades4j中看到了语句中的过程引用:
Map<DataObjectDesc, Reference> referenceMappings = this.dataObjectDescsProcessor.process(
signedDataObjects,
signature);
生成keyinfo数据结构之后。
你能建议我把Reference
对象的创建放在哪里,以获得对keyingo对象的引用吗?
谢谢,
第页。S.我看到xades4j可以选择性地设置为对keyinfo元素进行签名,但我看到了这个错误报告(http://code.google.com/p/xades4j/issues/detail?id=32)关于1.2.0版本,我不明白1.3.0是否修复了这个错误
M。
以下是我为KeyInfo所做的操作。
修改SignerBES.java
this.keyInfoBuilder.buildKeyInfo(signingCertificate, signature);
/* Add line below */
signature.getKeyInfo().setId("KeyInfo");
使用转换将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>
`
目前有一些基本签名选项的提供程序,使您能够对签名证书进行签名。当前xades4j的实现实际上是在您要求对证书进行签名时对整个KeyInfo元素进行签名。这不会让你控制变换,我不确定它应该控制。
我对这方面的建议持开放态度,因为这方面还有另一个问题。一种可能的方法是添加一种新类型的DataObjectDesc
,其语义是对KeyInfo或签名证书元素进行签名。