2013-03-22 34 views
0

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

有誰曾經不得不解決這個問題?

+0

異常表示問題在於處理對OCSP檢查的響應(以確保證書未被吊銷 - 通常檢查通過HTTP請求完成)。如果特定於一個客戶的證書,那麼他們的證書可能會指定一個特定的OCSP響應者(通過AuthorityInformationAccess擴展中的一個URI),並且響應者在某種方式(或者實際上在該URI不可用)有問題。 – 2013-03-22 14:37:39

+0

請提供顯示此行爲的示例文檔。 – mkl 2013-03-22 15:10:15

+0

好的,謝謝你的評論,我要檢查一下。 – jeremp 2013-03-25 16:13:05

回答

0

我設法找出發生了什麼問題。

BouncyCastle庫之間有衝突,我注意到Grails(我使用的框架)嵌入了Bouncycastle的另一個版本。

我排除放入系統罐子從我BuildConfig.groovy

// inherit Grails' default dependencies 
    inherits("global") { 
     excludes 'bcprov-jdk15', 'bcpg-jdk15', 'bcmail-jdk15' 
    } 

...和它的作品。