繁体   English   中英

在现有的PDF签名上添加签名时间戳

[英]Adding signature timestamp on existing PDF signature

我有一个已签名的PDF,我想在此签名上添加时间戳,还可以选择添加吊销信息(CRL / OCSP)。

有谁知道我该如何用Java(最好使用iTextpdf库)做到这一点?

先感谢您!

迈克尔

我假设您是指添加PAdES-5标准中定义的“文档安全性存储”和“文档级时间戳”(RFC 3161)。 我的书的第5.4节对此进行了解释。

这是可以同时添加这两种方法的示例:

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);
} 

请注意,如果最后添加的签名是文档级时间戳,则此方法将“ TIMESTAMP”写入System.out

重要提示:回答了这个问题之后,我看到了mkl的评论: 之后只能使用超出当前PDF标准I SO 32000-1的机制(例如PAdES第4部分)添加撤销信息。我的回答显然是假设您在谈论所应用的签名使用PAdES标准。 也许我在以“我假设”开头的第一句话中并不清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM