我試圖驗證使用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