2013-03-22 424 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' 
    } 

...和它的作品。