2014-09-05 350 views
0

我有一个现有的签名PDF,我想在此签名上添加时间戳,并且可以添加撤消信息(CRL/OCSP)。在现有的PDF签名上添加签名时间戳

有谁知道我怎么能在Java中做到这一点(最好使用iTextpdf库)?

预先感谢您!

迈克尔

+1

之后添加吊销信息只能使用超出当前PDF标准I SO 32000-1的机制,例如,第4部分。这对你有好处吗? – mkl 2014-09-05 21:11:14

+0

...当然,ISO必须没有空间书写,PAcES应该是PAdES。 *叹* – mkl 2014-09-06 13:53:06

回答

1

我假设你指的是增加一个“文档安全存储”和“文档级时间戳”,如同在的PAdES-5标准中所定义(RFC 3161)。这在section 5.4 of my book中有解释。

这是一个可以同时添加方法的一个例子:这个方法,如果添加的最后署名是文档级时间戳写道:“时间戳”到System.out

public void addLtv(
    String src, String dest, 
    OcspClient ocsp, CrlClient crl, TSAClient tsa) 
    throws IOException, DocumentException, GeneralSecurityException { 
    PdfReader r = new PdfReader(src); 
    FileOutputStream fos = new FileOutputStream(dest); 
    PdfStamper stp = PdfStamper.createSignature(r, fos, '\0', null, true); 
    LtvVerification v = stp.getLtvVerification(); 
    AcroFields fields = stp.getAcroFields(); 
    List<String> names = fields.getSignatureNames(); 
    String sigName = names.get(names.size() - 1); 
    PdfPKCS7 pkcs7 = fields.verifySignature(sigName); 
    if (pkcs7.isTsp()) 
     System.out.println("TIMESTAMP!"); 
    for (String name : names) { 
     v.addVerification(name, ocsp, crl, 
      LtvVerification.CertificateOption.WHOLE_CHAIN, 
      LtvVerification.Level.OCSP_CRL, 
      LtvVerification.CertificateInclusion.NO); 
    } 
    PdfSignatureAppearance sap = stp.getSignatureAppearance(); 
    LtvTimestamp.timestamp(sap, tsa, null); 
} 

注意。

重要:回答这个问题后,我看到MKL评论:添加吊销信息之后,才可能使用的机制超出了目前的PDF标准I SO 32000-1,例如PADES第4部分。我的回答显然假设您正在讨论使用PAdES标准应用的签名。也许这在我的第一句话中并不清楚,从“我认为”开始。