2014-01-24 151 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