首页 > 解决方案 > iText 证书验证

问题描述

我正在关注 iText 证书验证示例(这是在此处找到的第三个示例:https ://itextpdf.com/en/resources/examples/itext-7/digital-signatures-chapter-5 )。

我不太明白下面的代码(我在 C# 中使用 iTextsharp,但 java 的代码是相似的):

PdfPKCS7 pkcs7 = base.VerifySignature(fields, name);
X509Certificate[] certs = pkcs7.SignCertificateChain;
DateTime cal = pkcs7.SignDate;
Object[] errors = CertificateVerification.VerifyCertificates(certs, certificates, null, cal);

certificates是用于验证的列表certscertificates是受信任的证书)。在示例中,它是从以下文件创建的:

public const String ADOBE = "../../../../resources/adobeRootCA.cer";
public const String CACERT = "../../../../resources/CACertSigningAuthority.crt";
public const String BRUNO = "../../../../resources/bruno.crt";

我不确定自己尝试实现这些文件时应该从哪里获取这些文件。
我正在考虑根据 Windows 商店中的受信任证书验证签名证书,但由于我不明白该示例为何使用这些文件,我不确定是否可以针对 Windows 商店进行验证。

标签: itextdigital-signature

解决方案


CertificateVerification.VerifyCertificates 方法中的证书参数是 BouncyCastle 类型列表,因此您需要将 Windows 证书存储证书转换为 BouncyCastle 类型证书。

下面的代码可能有用:

        public void Test()
        {
            List<Org.BouncyCastle.X509.X509Certificate> certificates = new List<Org.BouncyCastle.X509.X509Certificate>();
            foreach (X509Certificate2 netCert in (new X509Store()).Certificates)
            {
                certificates.Add(Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(netCert));
            }
        }

推荐阅读