java - 如何在java中以编程方式读取p7b文件

标签 java x509certificate keystore p7b

我的本​​地存储中有 .p7b 文件 (C:\Users\Certs\cert.p7b)。 This解决方案对我不起作用。

我尝试了以下方法。

File file = new File("C:\Users\Certs\cert.p7b");
BufferedInputStream bis = null;
try {
     byte[] buffer = new byte[(int) file.length()];
     DataInputStream in = new DataInputStream(new FileInputStream(file));
     in.readFully(buffer);
     in.close();
     CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509");
     X509Certificate cert = certificatefactory.getCertificate(in);
}catch (Exception e){
     System.out.println("Exception");
}

但是它不起作用。那么我如何加载这个 .p7b 文件,然后将其存储在 keystore 中。

最佳答案

要从 PKCS#7 文件中读取证书,您可以使用以下代码片段:

public static final Certificate[] readCertificatesFromPKCS7(byte[] binaryPKCS7Store) throws Exception
{
    try (ByteArrayInputStream bais = new ByteArrayInputStream(binaryPKCS7Store);)
    {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Collection<?> c = cf.generateCertificates(bais);

        List<Certificate> certList = new ArrayList<Certificate>();

        if (c.isEmpty())
        {
            // If there are now certificates found, the p7b file is probably not in binary format.
            // It may be in base64 format.
            // The generateCertificates method only understands raw data.
        }
        else
        {

            Iterator<?> i = c.iterator();

            while (i.hasNext())
            {
                certList.add((Certificate) i.next());
            }
        }

        java.security.cert.Certificate[] certArr = new java.security.cert.Certificate[certList.size()];

        return certList.toArray(certArr);
    }
}

关于java - 如何在java中以编程方式读取p7b文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872058/

相关文章:

java - 如何使用 x.509 签名/证书签署 PDF

iis - IIS Express使用哪个帐户?

ssl - 在 Payara/Glassfish 服务器上更改主密码

java - 如何将两个 ".jceks"文件合并为一个?

java - 在 Java 程序中使用 curl

java - 两种类型的向下转型之间的区别

encoding - 如何使用 BER 编码对象 System.DirectoryServices.Protocols.BerConverter.Encode ("???", myData)

java - parallelStream中HashSet的线程安全

java - 单击菜单项时无法在屏幕上显示绘图。

android - 使用 KeyStore 进行 RSA 解密时出现间歇性 IllegalBlockSizeException