以PEM格式转换私钥

我用Java代码创建了一个自签名证书并添加到KeyStore中。 现在,我想将创建的私钥和证书导出为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格式文件的建议都会非常有用。

您使用Certificate.getEncoded()和Key.getEncoded()来获取DER并手动执行base 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"; 

感谢Daniel Roethlisberger,感谢您的回复。 我的回复得到了很大的帮助..

用Java实现如下

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