代码之家  ›  专栏  ›  技术社区  ›  jeremp

使用Itext验证Pdf签名时出错

  •  1
  • jeremp  · 技术社区  · 13 年前

    我正在尝试使用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.asn1已计数 网址:org.bouncycastle.asn1.ASN1Sequence.getInstance(未知来源) 网址:org.bouncycastle.asn1.ocsp.ResponseData.getInstance(未知来源) 网址:org.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)

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

    1 回复  |  直到 13 年前
        1
  •  1
  •   jeremp    13 年前

    我设法找到了问题所在。

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

    我从BuildConfig.groovy中排除了那些jar

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

    …而且它有效。

    推荐文章