apache / apache/poi

XAdES-T timestamp not shown in Word for signed DOCX

Open
#930 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.3k
Forks
844
Avg merge
5h 52m
Merged PRs (30d)
47

Description

Hello POI team,

I’m using Apache POI OOXML version **5.4.1** to sign a DOCX document with XAdES-T. Although the signature is recognised by Microsoft Word (Word shows it as a valid XAdES-T signature), when I inspect the timestamp information in Word the **timestamp details are missing**
Here are the key details:

- POI version: 5.4.1
- JVM / OS: Java 8, Windows 10, MS Word 2016
- In `_xmlsignatures/sig1.xml`, I see `…`.
- In Word: Signature status shows “valid signature”, but when I choose “See the additional siging information...”, I see **No timestamp information available** and **No timestamp authority information available**.

Here my code:
```java
public static byte[] signWithTSA(final byte[] dataToSign) throws IOException, InvalidFormatException, MarshalException, XMLSignatureException, RuntimeException, TransformException, NoSuchAlgorithmException, InvalidKeyException {
SignatureConfig signatureConfig = new SignatureConfig();
signatureConfig.setDigestAlgo(HashAlgorithm.sha256);
signatureConfig.setKey(PKCS12Utils.getPrivateKey());
List certChain = new ArrayList<>();
for (Certificate cert : PKCS12Utils.getCertificateChain()) {
certChain.add((X509Certificate) cert);
}
signatureConfig.setSigningCertificateChain(certChain);
signatureConfig.setExecutionTime(new Date());
signatureConfig.setIncludeEntireCertificateChain(true);
signatureConfig.setCanonicalizationMethod(Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
signatureConfig.setXadesCanonicalizationMethod(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);

// XAdES-T
signatureConfig.setTspUrl(Constants.TSA_SERVER);
signatureConfig.setTspRequestPolicy(null);
signatureConfig.setTspOldProtocol(false);
signatureConfig.setTspDigestAlgo(HashAlgorithm.sha256);
signatureConfig.setXadesRole("Owner");
signatureConfig.setSignatureDescription("Test ký dấu thời gian");
signatureConfig.setCommitmentType("Ký dấu thời gian");

signatureConfig.setSignatureFacets(Arrays.asList(
new OOXMLSignatureFacet(),
new KeyInfoSignatureFacet(),
new XAdESSignatureFacet(),
new XAdESXLSignatureFacet()
));

try (OPCPackage pack = OPCPackage.open(new ByteArrayInputStream(dataToSign))) {
SignatureInfo signatureInfo = new SignatureInfo();
signatureInfo.setOpcPackage(pack);
signatureInfo.setSignatureConfig(signatureConfig);
signatureInfo.confirmSignature();

ByteArrayOutputStream out = new ByteArrayOutputStream();
pack.save(out);
return out.toByteArray();
}
}
```

Any suggestions or sample code fragments for making the timestamp details visible in Word?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.