2011-04-28 51 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