0

我正在按照以下语句使用 xades4j 创建一个信封签名:

Element elemToSign = doc.getDocumentElement();
XadesSigner signer = new XadesTSigningProfile(...).newSigner();
new Enveloped(signer).sign(elemToSign);

但是我还需要在签名中添加其他属性,例如 ProofOfApprova 等...

我看到在 xades4j 示例中,proofOfApprovalProperties 使用不同的签名声明添加到封装签名中,例如:

AllDataObjsCommitmentTypeProperty globalCommitment = AllDataObjsCommitmentTypeProperty.proofOfApproval();
CommitmentTypeProperty commitment = CommitmentTypeProperty.proofOfCreation();

DataObjectDesc obj1 = new DataObjectReference('#' + elemToSign.getAttribute("Id"))
    .withTransform(new EnvelopedSignatureTransform())
    .withDataObjectFormat(new DataObjectFormatProperty("text/xml", "MyEncoding")
    .withDescription("Isto é uma descrição do elemento raiz")
    .withDocumentationUri("http://doc1.txt")
    .withDocumentationUri("http://doc2.txt"))
    .withIdentifier("http://elem.root"))
    .withCommitmentType(commitment)
    .withDataObjectTimeStamp(dataObjsTimeStamp)

SignedDataObjects dataObjs = new SignedDataObjects(obj1)
    .withCommitmentType(globalCommitment);

signer.sign(dataObjs, elemToSign);

我在这里看到使用了另一个签名过程,更具体地说,我创建 DataObjectreference 的语句说我对根标签使用“Id”属性对我来说是不可用的,因为在输入中我可以有任何类型的 xml 文档而我不能知道我可以使用哪种属性(如果存在)定义根标签。

简而言之,我可以有一些示例代码,在其中创建信封签名并使用“new Enveloped(signer).sign(elemToSign);”放置 proofOfApproval 属性,或者无论如何都不知道 xml 源结构?

谢谢

M。

4

1 回答 1

1

proofOfApproval 属性必须应用于被签名的数据对象,因此需要使用 SignedDataObjects 类。

Enveloped 类只是简单场景的助手。如果我理解正确,您想签署整个 XML 文档。XML-Signatures 规范定义了引用上的空 URI (URI="") 就是这个意思。如果您检查 Enveloped 类上的代码,您会看到它添加了一个带有空 uri的DataObjectReference 。

总而言之,您需要以下内容:

DataObjectDesc obj1 = new DataObjectReference("")
    .withTransform(new EnvelopedSignatureTransform())
    .withCommitmentType(CommitmentTypeProperty.proofOfApproval());
signer.sign(new SignedDataObjects(obj1), elemToSign);
于 2012-08-24T14:12:51.513 回答