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