0

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.ASN1Sequence.getInstance (不明なソース) org.bouncycastle.asn1.ocsp.ResponseData.getInstance (不明なソース) で org.bouncycastle.asn1.ASN1.ASN1Enumerated .bouncycastle.asn1.ocsp.BasicOCSPResponse.(不明なソース) org.bouncycastle.asn1.ocsp.BasicOCSPResponse.getInstance (不明なソース) com.itextpdf.text.pdf.security.PdfPKCS7.findOcsp(PdfPKCS7.java:1284) com.itextpdf.text.pdf.security.PdfPKCS7.(PdfPKCS7.java:382) で com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2317) で

誰もこの問題を解決しなければなりませんでしたか?

4

1 に答える 1

0

私は何がうまくいかなかったのかを見つけることができました。

BouncyCastle ライブラリ間に競合がありました。Grails (私が使用しているフレームワーク) が別のバージョンの Bouncycastle を埋め込んでいることに気付きました。

これらのjarをBuildConfig.groovyから除外しました

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

...そしてそれは機能します。

于 2013-05-29T09:26:46.257 に答える