【问题标题】:Error when validating a Pdf signature with Itext使用 Itext 验证 Pdf 签名时出错
【发布时间】:2013-03-22 10:21:39
【问题描述】:

我正在尝试使用 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(未知来源) 在 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)

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

【问题讨论】:

  • 异常表明问题在于处理对 OCSP 检查的响应(以确保证书没有被吊销 - 通常检查是通过 HTTP 请求完成的)。如果它特定于某个客户的证书,那么他们的证书可能指定了一个特定的 OCSP 响应者(通过 AuthorityInformationAccess 扩展中的 URI),并且该响应者在某些方面有问题(或者实际上在该 URI 上不可用)。
  • 请提供显示此行为的示例文档。
  • 好的,谢谢你的评论,我去看看。

标签: java pdf itext digital-signature bouncycastle


【解决方案1】:

我设法找到了问题所在。

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

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

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

...它的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2018-06-25
    • 2022-08-03
    • 2014-04-19
    • 2014-09-19
    相关资源
    最近更新 更多