2011-04-28 50 views
0

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

回答

1

我不是,如果我完全按照您的要求,但它听起来像要调整为PDF签名报告的日期。

假设你正在使用PdfStamper签署该文件,已创建后的签名尝试

pdfStamper.getSignatureAppearence().setSignDate(calendar) 

其中日历是您已使用从时间戳Web服务的响应创建的日历实例。

获取iText包含TSA信息以及签名会涉及更多一点。它有点超出我的知识领域,但根据我的理解,您需要使用外部生成的证书,而大多数人使用BouncyCastle来完成。

这个discussion有一个如何做到这一点的例子。获得加密证书时,您最终会想要使用TSAClientBouncyCastle。这个page也有一个替代的例子,包括OCSP信息。

如果你得到这个解决方案,请添加你的解决方案,以便在stackoverflow上有一个更权威的答案。

+0

'如果我把这个放到我的代码中,pdf阅读器仍然会说日期/时间来自签名者的计算机。 从WS-响应,我得到: “#TimeStampInfo -...” - > DSIG:DigestValue中(哈希) “#TimeStampAuthority” - > DSIG:DigestValue中(散) DSIG:SignedInfo中 - > DSIG: SignatureValue(hash),dsig:X509Certificate(hash);时间戳信息 - > ds:DigestValue(hash),ts:SerialNumber 我需要将这些值添加到PDF,读者会将其识别为TSA时间戳。 我需要重写哪些metods?我能深入了解代码吗?' – TurboJupi 2011-04-29 07:53:01

+0

好的,我明白了你现在要去的地方。这有点远离我的知识领域,但请检查答案中的链接。他们可能会帮助你,而其他人可能会详细说明。 – tschaible 2011-04-29 12:12:31

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 
+0

警告:您正在使用长期弃用的itext版本2和过时的Wincer_Signed事物! – 2016-08-31 15:33:12