我已经用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
    }
}

关于如何将 key 和证书导出为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";

关于java - 转换PEM格式的私钥,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14425875/

10-12 22:53