【问题标题】:PEMParser bouncy castle read certificate and private key from PEMPEMParser 充气城堡从 PEM 读取证书和私钥
【发布时间】:2022-10-30 21:04:04
【问题描述】:

我创建了一个 PEMParser 对象,我将包含链证书、加密私钥等的 PEM 字符串传递给该对象。检索解密的私钥和证书 X509 的方法是什么?我试过了:

pemParser.readObject() 

我能够获得一个 x509CertificateHolder (如何从中获取证书?)并在第二次调用加密的私钥信息。

提前致谢。

【问题讨论】:

    标签: java ssl bouncycastle


    【解决方案1】:

    假设您的 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));
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      相关资源
      最近更新 更多