使用Java和iText为PDF添加时间戳时出现问题

使用Java和iText为PDF添加时间戳时出现问题,java,timestamp,itext,Java,Timestamp,Itext,我正在编写一个应用程序,使用iText和Java对PDF进行签名和时间戳。 因为我们(在斯洛文尼亚)有不同的方法从TSA获取时间戳(通过web服务,使用证书和密码),所以我不能从iText使用这些方法。我有一个Perl脚本。 所以如何或使用哪些代码部分将时间戳和摘要(从web服务响应)写入PDF???如果我没有完全按照您的要求进行操作,我不知道,但听起来您想调整报告的PDF签名日期 假设您正在使用PdfStamper对文档进行签名,请在创建签名后重试 pdfStamper.getSignatur

我正在编写一个应用程序,使用iText和Java对PDF进行签名和时间戳。 因为我们(在斯洛文尼亚)有不同的方法从TSA获取时间戳(通过web服务,使用证书和密码),所以我不能从iText使用这些方法。我有一个Perl脚本。
所以如何或使用哪些代码部分将时间戳和摘要(从web服务响应)写入PDF???

如果我没有完全按照您的要求进行操作,我不知道,但听起来您想调整报告的PDF签名日期

假设您正在使用PdfStamper对文档进行签名,请在创建签名后重试

pdfStamper.getSignatureAppearence().setSignDate(calendar)
其中,calendar是使用时间戳web服务的响应创建的日历实例

让iText包含TSA信息和签名要复杂一些。这有点超出了我的知识范围,但据我所知,您需要使用外部生成的证书,大多数人都使用BouncyCastle

这是一个如何做到这一点的例子。在获取加密证书时,您最终会希望使用。这有一个包含OCSP信息的替代示例

如果您解决了这个问题,请添加您的解决方案,以便对stackoverflow有一个更权威的答案。

以下是一个示例

你必须更换

   sap.setCrypto(null, chain, null, PdfSignatureAppearance.SELF_SIGNED);
为了

并将这些正确版本的libs

- org.bouncycastle -> bcprov-jdk16 1.40
- org.bouncycastle -> bctsp-jdk16 1.38

如果我将其放入我的代码中,pdf阅读器仍然会说日期/时间来自签名者的计算机。从WS-response中,我得到:“#TimeStampInfo-…”->dsig:DigestValue(hash)”#TimeStampAuthority“->dsig:DigestValue(hash)dsig:SignedInfo->dsig:SignatureValue(hash),dsig:X509Certificate(hash);TimeStampInfo->ds:DigestValue(散列),ts:SerialNumber(长),ts:CreationTime(时间戳),ts:Nonce(长);我需要将这些值添加到PDF中,以便读者将其识别为TSA时间戳。我需要覆盖哪些方法?我能深入理解代码吗?
好的,我知道你现在要做什么了。这有点超出了我的知识范围,但请查看答案中的链接。他们可能会帮助您,其他人也可能会详细说明。警告:您正在使用长期不推荐的itext版本2和过时的Wincer_签名的东西!
- org.bouncycastle -> bcprov-jdk16 1.40
- org.bouncycastle -> bctsp-jdk16 1.38