使用Itext验证Pdf签名时出错

时间:2013-03-22 10:21:40

标签: java pdf itext digital-signature bouncycastle

我正在尝试使用Itext 5和BouncyCastle 1.48验证PDF签名。我的代码适用于许多签名的pdf,但是在特定客户的某些pdf上。这是我的Java代码

// 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.ASN1Enumerated       在org.bouncycastle.asn1.ASN1Sequence.getInstance(未知来源)       at org.bouncycastle.asn1.ocsp.ResponseData.getInstance(Unknown Source)       在org.bouncycastle.asn1.ocsp.BasicOCSPResponse。(未知来源)       在org.bouncycastle.asn1.ocsp.BasicOCSPResponse.getInstance(未知来源)       at com.itextpdf.text.pdf.security.PdfPKCS7.findOcsp(pdfPKCS7.java:1284)       在com.itextpdf.text.pdf.security.PdfPKCS7。(PdfPKCS7.java:382)       at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2317)

有没有人必须解决这个问题?

1 个答案:

答案 0 :(得分:0)

我设法找到了什么问题。

BouncyCastle libs之间存在冲突,我注意到Grails(我使用的框架)嵌入了另一个版本的Bouncycastle。

我从BuildConfig.groovy

中排除了这个罐子
   // inherit Grails' default dependencies
   inherits("global") {
      excludes 'bcprov-jdk15', 'bcpg-jdk15', 'bcmail-jdk15' 
   }

......它有效。