[英]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.