我正在编写一个应用程序,用于使用iText和Java对PDF进行签名和时间戳。 因为我们(在斯洛文尼亚)有不同的方法从我们的TSA获取时间戳(通过Web服务,使用证书和密码)我不能使用iText中的那些方法。我有一个Perl脚本。 那么..我可以如何编写代码的哪些部分,或者将时间戳和摘要(从Web服务响应中)写入PDF?
答案 0 :(得分:1)
如果我完全按照您的要求进行操作,我就不会这样做,但听起来您想要调整为PDF签名报告的日期。
假设您使用PdfStamper对文档进行签名,请在创建签名后尝试
pdfStamper.getSignatureAppearence().setSignDate(calendar)
其中calendar是您使用时间戳Web服务的响应创建的Calendar实例。
让iText包含TSA信息以及签名更复杂一些。它有点超出我的知识领域,但根据我的理解,你需要使用外部生成的证书,大多数人都是使用BouncyCastle。
这个discussion有一个如何做的例子。在获取加密证书时,您最终希望使用TSAClientBouncyCastle。此page还有一个替代示例,包括OCSP信息。
如果你得到了解决方案,请添加你的解决方案,以便在stackoverflow上有更权威的答案。
答案 1 :(得分:0)
这是一个例子
http://itextpdf.sourceforge.net/howtosign.html#signtsocspjava
你必须替换
sap.setCrypto(null, chain, null, PdfSignatureAppearance.SELF_SIGNED);
的
sap.setCrypto(pk, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
并放置这些正确版本的库
- org.bouncycastle -> bcprov-jdk16 1.40
- org.bouncycastle -> bctsp-jdk16 1.38