-
Notifications
You must be signed in to change notification settings - Fork 806
Open
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<xd:SignatureTimeStamp><xd:EncapsulatedTimeStamp>…</xd:EncapsulatedTimeStamp></xd:SignatureTimeStamp>. - 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:
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<X509Certificate> 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?
Metadata
Metadata
Assignees
Labels
No labels