XAdES-T timestamp not shown in Word for signed DOCX
- 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.