【发布时间】:2022-10-30 21:04:04
【问题描述】:
我创建了一个 PEMParser 对象,我将包含链证书、加密私钥等的 PEM 字符串传递给该对象。检索解密的私钥和证书 X509 的方法是什么?我试过了:
pemParser.readObject()
我能够获得一个 x509CertificateHolder (如何从中获取证书?)并在第二次调用加密的私钥信息。
提前致谢。
【问题讨论】:
标签: java ssl bouncycastle
我创建了一个 PEMParser 对象,我将包含链证书、加密私钥等的 PEM 字符串传递给该对象。检索解密的私钥和证书 X509 的方法是什么?我试过了:
pemParser.readObject()
我能够获得一个 x509CertificateHolder (如何从中获取证书?)并在第二次调用加密的私钥信息。
提前致谢。
【问题讨论】:
标签: java ssl bouncycastle
假设您的 pem 文件有两个条目,第一个是证书,第二个是密钥。
另一个假设是密钥的类型为 pkcs8 并且受密码保护。
第一次调用 pemParser.readObject() 是在假设 pem 文件中的第一个条目是 x509 证书的情况下完成的
对 pemParser.readObject() 的第二次调用是在假定 pem 文件中的第二个条目是 pkcs8 密码保护密钥的情况下完成的
变量证书将包含 x509 证书,变量 finalKey 将包含私钥
private void getCertAndKeyFromPemFile(String fileName, String keyPassword) throws Exception {
Security.addProvider(new BouncyCastleProvider());
PEMParser pemParser = new PEMParser(new FileReader(fileName));
JcaX509CertificateConverter x509Converter = new JcaX509CertificateConverter().setProvider(new BouncyCastleProvider());
X509Certificate certificate =x509Converter.getCertificate((X509CertificateHolder) pemParser.readObject());
PKCS8EncryptedPrivateKeyInfo privateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) pemParser.readObject();
InputDecryptorProvider decryptorProvider = new JceOpenSSLPKCS8DecryptorProviderBuilder().build(keyPassword.toCharArray());
PrivateKey finalKey = new JcaPEMKeyConverter().getPrivateKey(privateKeyInfo.decryptPrivateKeyInfo(decryptorProvider));
}
【讨论】: