当前位置: 首页 > 知识库问答 >
问题:

使用Itext验证Pdf签名时出错

陈阳舒
2023-03-14

我正在尝试用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;
}

有时我会遇到这样的例外:

JAVAlang.IllegalArgumentException:getInstance:org中的未知对象。蹦蹦跳跳。asn1。Asn1在组织中列举。蹦蹦跳跳。asn1。ASN1序列。组织上的getInstance(未知源)。蹦蹦跳跳。asn1。ocsp。回答塔塔。组织上的getInstance(未知源)。蹦蹦跳跳。asn1。ocsp。基本的回答。(来源不详)在org。蹦蹦跳跳。asn1。ocsp。基本的回答。com上的getInstance(未知源)。itextpdf。文本pdf。安全PdfPKCS7。findOcsp(PdfPKCS7.java:1284)位于com。itextpdf。文本pdf。安全PdfPKCS7。(PdfPKCS7.java:382)在com上。itextpdf。文本pdf。阿克罗菲尔德。verifySignature(AcroFields.java:2317)

有人需要解决这个问题吗?

共有1个答案

吴凯
2023-03-14

我设法找到了问题所在。

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

我从BuildConfig中排除了thoses jar。棒极了

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

...它起作用了。

 类似资料:
  • 我正在尝试用Itext 5.4和BouncyCastle 1.49验证PDF签名(它是通过Adobe Reader X用我的数字证书手动签名的)。 但是验证结果总是出乎意料的,下面是我的Java代码: 控制台显示:完整性检查OK?真

  • 正如标题所说,我想知道给定的PDF文件是否已经过数字签名。 我用iText签署了它,但我不知道它是否已经签署,以最终辞职或采取其他行动。 有没有简单的方法(可能使用iText)?

  • 我正在用C#开发一个执行数字签名验证的webserver,以确保pdf文件没有被修改。我使用了iText和iTextSharp。 和我的C#验证码: 在VerifySignature(name)行中;抛出NullReferenceException! 有趣的是,如果我使用C#代码执行签名,我就可以在java中验证它,因为我添加了这些指令:BouncyCastleProvider provider=

  • 我需要将一个使用iText5进行PDF签名验证/创建的Java程序移植到iText7。 旧代码显然不能按原样工作,因为iText的大部分内容都经过了重组。 我找到的所有关于如何做到这一点的例子和教程都是针对iText5的。(非常好的)白皮书也是如此。它们依赖于通过方法返回的列表,在该方法上执行所有与签名相关的操作。 在iText7中,不再具有该方法。 有人知道iText7的例子/文档吗?

  • 我正在ASP.NET应用程序中使用iText7对PDF进行数字签名。我用的是vb,但我也能找到一个C#答案。我们使用GlobalSign DSS以使签名不作为未知(AATL)出现。 我从我们公司的SSL证书创建了一个pfx文件,我可以使用该文件对PDF文件进行签名,但我不明白如何使用从GlobalSign获得的东西来完成同样的事情。此服务要求发送一个十六进制编码的SHA256摘要,作为返回,我接收