簡體   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