我试图验证使用Itext 5和BouncyCastle 1.48的PDF签名。我的代码适用于许多已签名的pdf,但适用于特定客户的某些pdf。这里是我的Java代码使用Itext验证PDF签名时出错
// The entry point
public static void verifySignatures(String path) throws IOException, GeneralSecurityException {
System.out.println(path);
PdfReader reader = new PdfReader(path);
AcroFields fields = reader.getAcroFields();
ArrayList<String> names = fields.getSignatureNames();
System.out.println("Il y a "+names.size()+" signatures");
for (String name : names) {
System.out.println("===== " + name + " =====");
verifySignature(fields, name);
}
System.out.println();
}
public static PdfPKCS7 verifySignature(AcroFields fields, String name)
throws GeneralSecurityException, IOException {
System.out.println("Signature covers whole document: "+ fields.signatureCoversWholeDocument(name));
System.out.println("Document revision: " + fields.getRevision(name)
+ " of " + fields.getTotalRevisions());
PdfPKCS7 pkcs7 = fields.verifySignature(name);
System.out.println("Integrity check OK? " + pkcs7.verify());
return pkcs7;
}
有时候,我得到这个异常:
java.lang.IllegalArgumentException异常:未知的对象的getInstance:在org.bouncycastle.asn1.ASN1Sequence org.bouncycastle.asn1.ASN1Enumerated (未知源) at org.bouncycastle.asn1.ocsp.BasicOCSPResponse(未知源) .getInstance(未知来源) at com.i textpdf.text.pdf.security.PdfPKCS7.findOcsp(PdfPKCS7.java:1284) at com.itextpdf.text.pdf.security.PdfPKCS7。(PdfPKCS7.java:382) at com.itextpdf.text.pdf.AcroFields .verifySignature(AcroFields.java:2317)
有谁曾经不得不解决这个问题?
异常表示问题在于处理对OCSP检查的响应(以确保证书未被吊销 - 通常检查通过HTTP请求完成)。如果特定于一个客户的证书,那么他们的证书可能会指定一个特定的OCSP响应者(通过AuthorityInformationAccess扩展中的一个URI),并且响应者在某种方式(或者实际上在该URI不可用)有问题。 – 2013-03-22 14:37:39
请提供显示此行为的示例文档。 – mkl 2013-03-22 15:10:15
好的,谢谢你的评论,我要检查一下。 – jeremp 2013-03-25 16:13:05