转换PEM格式的私钥(Convert private key in PEM format)

2019-08-07 13:28发布

我已经创建了Java代码自签名证书并添加到密钥库。 现在,我想导出私钥和证书创建成PEM格式的文​​件。 是否有可能实现这一目标,没有任何第三方库? 下面是我用来创建自烧焦证书的代码。

  public void createSelfSignedSSLCertificate() {
    try {            
        final CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
        final X500Name x500Name =
            new X500Name(commonName, organizationalUnit, organization, city, state, country);
        keypair.generate(keysize);
        final PrivateKey privKey = keypair.getPrivateKey();
        final X509Certificate[] chain = new X509Certificate[1];
        chain[0] = keypair.getSelfCertificate(x500Name, new Date(), validity * 24 * 60 * 60);
        final String alias = JettySSLConfiguration.SSL_CERTIFICATE_ALIAS;
        keyStore.setKeyEntry(alias, privKey, keyStorePassword.toCharArray(), chain);
    } catch (final Exception e) {
       // Handle Exception
    }       
}

如何将密钥和证书导出与PEM格式文件的任何建议将是很有益的。

Answer 1:

您使用Certificate.getEncoded()和Key.getEncoded()来获得DER和做底座64编码并手动页眉/页脚,例如使用DatatypeConverter.printBase64Binary()或一些其它方式。 就像是:

certpem = "-----BEGIN CERTIFICATE-----\n" +
          DatatypeConverter.printBase64Binary(chain[0].getEncoded())) +
          "\n-----END CERTIFICATE-----\n";
keypem  = "-----BEGIN RSA PRIVATE KEY-----\n" +
          DatatypeConverter.printBase64Binary(privKey.getEncoded())) +
          "\n-----END RSA PRIVATE KEY-----\n";


Answer 2:

感谢丹尼尔·罗特利斯伯格,您的回复。 我从您的答复很大的帮助..

实现了在Java中,如下

String encodedString = "-----BEGIN PRIVATE KEY-----\n";
            encodedString = encodedString+Base64.getEncoder().encodeToString(Enrollment2.getKey().getEncoded())+"\n";
            encodedString = encodedString+"-----END PRIVATE KEY-----\n";


文章来源: Convert private key in PEM format