【问题标题】:java.security.InvalidKeyException: No installed provider supports this key: (null) while verifying signed pdfjava.security.InvalidKeyException:没有安装的提供程序支持此密钥:(null)在验证签名的pdf时
【发布时间】:2018-04-11 07:49:10
【问题描述】:

我遇到了这个异常

PdfPKCS7 pkcs7 = fields.verifySignature(name);

这是完整的代码

import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.security.PdfPKCS7;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;

public class NewClass {

    public static void main(String arg[])
            throws IOException, GeneralSecurityException {
        String path = "C:/Akshay/output.pdf";
        System.out.println(path);
        PdfReader reader = new PdfReader(path);
        AcroFields fields = reader.getAcroFields();
        ArrayList<String> names = fields.getSignatureNames();
        for (String name : names) {
            System.out.println("===== " + name + " =====");
            verifySignature(fields, name);
        }
        System.out.println();
    }

    public static void 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());

    }

}

使用的罐子:

  1. itextpdf-5.5.13.jar
  2. bcprov-jdk14-1.49.jar

【问题讨论】:

  • 您需要使用java.security.Security.addProvider(new BouncyCastleProvider());注册bc provider。
  • 如果上面的答案没有解决您的问题,是否可以提供有关您正在签名的密钥(类型、长度、使用的签名方法)的一些详细信息?
  • 上述解决方案确实有效.. 谢谢@Paulo Soares

标签: java cryptography itext digital-signature


【解决方案1】:

您应该添加像 BouncyCastle 这样的提供程序,并像下面的示例一样添加调用:

先添加提供者

Security.addProvider(new BouncyCastleProvider());

然后添加提供者获取签名

PdfPKCS7 pkcs7 = fields.verifySignature(name,"BC");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2014-11-30
    • 2019-10-04
    • 2020-06-23
    • 2018-09-10
    • 2021-12-17
    • 2021-12-20
    相关资源
    最近更新 更多