2014-01-24 152 views
0

是否可以使用iText或任何其他組件離線計時PDF文檔?使用iText離線PDF時間戳

我使用了iText和TSAClient類的標準解決方案,但它需要TSA作爲在線服務。我們有來自TSA的證書(包括私鑰),其目的是創建時間戳簽名,但我無法找到任何技術方法如何使用iText來完成。

感謝您的任何指導。 Richmond

+0

你看過PDFStamper嗎? – epoch

+1

您在本地設置了時間戳服務器;那麼你可以在你的代碼中使用它作爲在線時間戳服務器。 – mkl

+0

嗨,我確實看過PFDStamper,但所有樣本都使用TSA作爲在線服務(通過TSAClient類)。我們沒有任何TSA服務器(聯機或本地),我們只有該服務器的證書(包括私鑰)。 – user3232054

回答

0

我已經使用iText和TSAClient類來搜索標準解決方案,但它需要TSA作爲在線服務。

TSAClient不是最終類,而只是一個接口:

/** 
* Time Stamp Authority client (caller) interface. 
* <p> 
* Interface used by the PdfPKCS7 digital signature builder to call 
* Time Stamp Authority providing RFC 3161 compliant time stamp token. 
* @author Martin Brunecky, 07/17/2007 
* @since 2.1.6 
*/ 
public interface TSAClient { 
    /** 
    * Get the time stamp token size estimate. 
    * Implementation must return value large enough to accomodate the entire token 
    * returned by getTimeStampToken() _prior_ to actual getTimeStampToken() call. 
    * @return an estimate of the token size 
    */ 
    public int getTokenSizeEstimate(); 

    /** 
    * Get RFC 3161 timeStampToken. 
    * Method may return null indicating that timestamp should be skipped. 
    * @param caller PdfPKCS7 - calling PdfPKCS7 instance (in case caller needs it) 
    * @param imprint byte[] - data imprint to be time-stamped 
    * @return byte[] - encoded, TSA signed data of the timeStampToken 
    * @throws Exception - TSA request failed 
    */ 
    public byte[] getTimeStampToken(PdfPKCS7 caller, byte[] imprint) throws Exception; 

} 

因此,所有你需要做的就是實現該接口在任何你想要的方式來產生時間戳。儘管評論似乎暗示了一些在線服務,但您只需返回一些標記給定​​的時間戳即可。

這就是說,這樣的時間戳並不真正值得名稱。您能否保證您打算在可接受的錯誤範圍內創建正確的時間戳?

因此,您很難找到現有的TSAClient實現。但是現有的安全庫(如Bouncy Castle)應該能夠很容易地創建時間戳請求響應。

+0

謝謝!我看起來像個好方向!我明白你的觀點,它肯定不是時間戳的典型用法。但是我們完全可以確定時間戳將基於服務器上的本地時間執行時間戳。 我目前不知道如何在「byte [] imprint」輸入參數中的數據上創建時間戳。我回顧了SecureBlackbox和Councy Castle的實現,並注意到僅使用標準在線TSA進行「在線」實施。 你能指導我如何在壓印參數中標記數據嗎? – user3232054

+0

我不是BouncyCastle的專家。基本上你可以採用RFC 3161,並根據那裏的ASN.1定義使用BC ASN.1構建器和包裝類來構建一個時間戳。很可能已經有一些BC助手課爲你做這件事。您可能需要按照「如何使用Bouncy Castle構建RFC 3161時間戳」這一行來單獨提出SO問題。這就是說,*我們完全可以確定時間戳是基於當地時間在服務器上完成時間戳的。* - **你完全可以,但是PDF是否保留在你的組織中?如果不是,**收件人**可能不是。 – mkl

+0

謝謝,我很清楚這種方式創建時間戳的信任問題。我將單獨詢問RFC 3161.我發現只有SecureBlackbox組件實現它,但它們非常昂貴。 – user3232054