使用iText的脱机PDF时间戳

时间:2014-01-24 12:56:37

标签: pdf itext digital-signature trusted-timestamp

是否可以使用iText或任何其他组件为PDF文档脱机添加时间戳?

我使用iText和TSAClient类搜索了标准解决方案,但它要求TSA作为在线服务。我们有来自TSA(包括私钥)的证书,其目的是创建时间戳签名,但我找不到任何技术方法如何使用iText。

感谢您提供任何指导。 里士满

1 个答案:

答案 0 :(得分: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;

}

因此,您所要做的就是实现该接口以您想要的任何方式生成时间戳。即使评论似乎暗示某些在线服务,您只需返回一些byte[]时间戳标记给定的byte[] imprint

有人说过,这样的时间戳并不值得这个名字。您能否保证您打算在可接受的误差范围内创建正确的时间戳?

因此,您很难找到现有的TSAClient实现。但现有的安全库(如Bouncy Castle)应该可以很容易地创建时间戳请求响应。