itextpdf获取PDF签名证书信息

pom.xml

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>
SignatureUtilTest

import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.security.PdfPKCS7;
import lombok.SneakyThrows;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;

import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.ArrayList;

/**
 * @Auther: lenky.li
 * @Date: 2022/2/23 17:04
 */
public class SignatureUtilTest {

    @SneakyThrows
    @Test
    public void verifySignature() {
        // 添加提供者以获取签名
        Security.addProvider(new BouncyCastleProvider());
        long start = System.currentTimeMillis();
        PdfReader reader = new PdfReader(new ClassPathResource("file/100000发票.pdf").getInputStream()); //pdf reader 读取流内容
        AcroFields fields = reader.getAcroFields(); // 获取Acro字段
        ArrayList<String> names = fields.getSignatureNames(); // 获取Acro字段里的签名信息
        for (String name : names) {
            // 指定提供者
            PdfPKCS7 pkcs7 = fields.verifySignature(name,"BC"); // 获取签名的pkcs7数据
            X509Certificate certificate = pkcs7.getSigningCertificate();
            System.out.println(pkcs7.getSignDate().getTime()); // 签名日期时间
            System.out.println(certificate.getNotBefore()); // 有效期开始时间
            System.out.println(certificate.getNotAfter()); // 有效期
            System.out.println(certificate.getSubjectDN().getName()); // 证书名称
            System.out.println(certificate.getSerialNumber().toString(16)); // 序列号要转16进制
            System.out.println(certificate.getPublicKey().getFormat()); // 证书格式
            System.out.println(certificate.getIssuerDN().getName()); // 证书颁发者
        }
        System.out.println("耗时:"+(System.currentTimeMillis()-start));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值