如何编程读取PKCS#12格式的证书与私钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编程读取PKCS#12格式的证书与私钥相关的知识,希望对你有一定的参考价值。

pkcs8格式的私钥转换工具。它处理在PKCS#8格式中的私钥文件。它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 PrivateKeyInfo格式和EncryptedPrivateKeyInfo格式。
用法:
[cpp] view plaincopy
openssl pkcs8 [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename]
[-passout arg] [-topk8] [-noiter] [-nocrypt] [-nooct] [-embed] [-nsdb] [-v2 alg] [-v1 alg] [-engine id]
选项说明:
-inform PEM|DER::输入文件格式,DER或者PEM格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
-outform DER|PEM:输出文件格式,DER或者PEM格式。
-in filename:输入的密钥文件,默认为标准输入。如果密钥被加密,会提示输入一个密钥口令。
-passin arg:输入文件口令保护来源。
-out filename:输出文件,默认为标准输出。如果任何加密操作已经执行,会提示输入一个密钥值。输出的文件名字不能和输入的文件名一样。
-passout arg:输出文件口令保护来源。
参考技术A 编程读取
PKCS#12格式的证书与私钥

java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)

 

import lombok.Cleanup;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Enumeration;

/**
 * An utility class for obtaining @link PrivateKey and the serial number of the trusted @link X509Certificate 
* from keystore in PKCS12 format
*/ @Getter @Setter @UtilityClass public class SignCertInfo private static final SignCertInfo DEFAULT = new SignCertInfo(); private String certId; private PrivateKey privateKey; public static SignCertInfo createNew(Configs configs) return createNewFrom(getKeyStore(configs), configs); @SneakyThrows private static SignCertInfo createNewFrom(KeyStore store, Configs configs) Enumeration<String> aliases = store.aliases(); while (aliases.hasMoreElements()) String alia = aliases.nextElement(); if (isX509Cert(store, alia)) newSignCertInfo(store, alia, configs); return DEFAULT; @SneakyThrows private static KeyStore getKeyStore(Configs configs) @Cleanup FileInputStream stream = new FileInputStream(configs.getPfxPath()); KeyStore store = KeyStore.getInstance(Pkcs12KeyStore.TYPE, Pkcs12KeyStore.PROVIDER); store.load(stream, configs.getPfxPasswd().toCharArray()); return store; @SneakyThrows private static boolean isX509Cert(KeyStore store, String alia) return CertificateType.X509.equalsIgnoreCase(store.getCertificate(alia).getType()); @SneakyThrows private static SignCertInfo newSignCertInfo(KeyStore store, String alia, Configs configs) SignCertInfo signCertInfo = new SignCertInfo(); signCertInfo.setCertId(((X509Certificate) store.getCertificate(alia)).getSerialNumber().toString()); signCertInfo.setPrivateKey((PrivateKey) store.getKey(alia, configs.getPfxPasswd().toCharArray())); return signCertInfo;

 

public interface Pkcs12KeyStore 

  String TYPE = "PKCS12";

  String PROVIDER = "SunJSSE";

 

以上是关于如何编程读取PKCS#12格式的证书与私钥的主要内容,如果未能解决你的问题,请参考以下文章

读取pkcs12证书信息

如何从 .SPC(代码签名证书)和 .PKCS12(私钥)生成 PKCS12 (.p12)?

通过java读取PKCS7和.p12文件证书信息(subjectDN,vaildstartfrom,ValildTo ..)

证书与私钥匹配

java 从 PKCS12(比如pfx格式)证书中提取私钥证书(PrivateKey)和受信任的公钥证书(X509Certificate)的序列号(SerialNumber)

以编程方式从 PEM 获取 KeyStore