有没有办法用 xades4j 添加 QualifyingPropertiesReference?

is there a way to add QualifyingPropertiesReference with xades4j?

我需要将两个具有给定 URI 值的 QualifyingPropertiesReference 节点添加到 XadES 签名内的对象中。

我正在生成一个 xml 签名,它需要通过 URL 传递证书,而不是将其附加到 KeyInfo 元素中。为此,QualifyingPropertiesReference 看起来很合适,但是我在 wiki/tests 中找不到添加此元素的方法或示例。查看代码,我发现了 XmlQualifyingPropertiesReferenceType,但没有看到它在任何地方被使用。我的签名代码:

XadesSigningProfile signingProfile =
                    new XadesBesSigningProfile(keyingDP)
.withBasicSignatureOptions(new BasicSignatureOptions().includeSigningCertificate(SigningCertificateMode.NONE));
XadesSigner signer = signingProfile.newSigner();

Document doc = createDocument(xmlMessage);

DataObjectDesc obj = new DataObjectReference("")
                    .withTransform(new EnvelopedSignatureTransform());
SignedDataObjects dataObjects = new SignedDataObjects().withSignedDataObject(obj);

signer.sign(dataObjects, doc.getFirstChild());

基本上,我想要这种签名结构:

<Signature>
   ....
   <Object>
     <QualifyingPropertiesReference URI="some_url"/>
     <QualifyingPropertiesReference URI="some_url2"/>
     <QualifyingProperties>
        ....
   </Object>
</Signature>

如果没有办法,将它们手动添加到 doc 会使 Signature 无效吗? <Object> 内容是否用于散列?

xades4j 不支持 QualifyingPropertiesReference 主要有两个原因:1) 它没有真正的用例; 2) XAdES 基线配置文件不允许 section 6.1 of baseline profiles spec.

就是说,我不确定您的用例是否适用于 QualifyingPropertiesReference。此元素只是指向存在限定属性的另一个 XML 资源的一种方式。也许你误解了它。我认为这与证书或如何获得证书没有任何关系。

签名不包含验证所需的证书是可以的。在这种情况下,验证者应该知道如何获得它们。另一种选择是将 "application-specific" 数据添加到签名中,在其中传递 URL.