3

我有使用 java 类 CertAndKeyGen 和 X500Name 创建的证书,我能够生成字节数组中的证书。现在我想要我在证书中使用的私钥并将其转换为可读格式。下面是我用来创建证书的代码,

    CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null); 
    X500Name x500Name = new X500Name(commonName, organizationalUnit, organization, city, state, country);
    keypair.generate(keysize);
    PrivateKey privKey = keypair.getPrivateKey();
    PKCS10 certReq = keypair.getCertRequest(x500Name);
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = keypair.getSelfCertificate(x500Name, new Date(), (long) validity * 24 * 60 * 60);
    keyStore.setKeyEntry(alias, privKey, keyStorePassword.toCharArray(), chain);                    
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    PrintStream ps = new PrintStream(bs);
    certReq.print(ps);
    byte[] certReqPrintable = bs.toByteArray(); 

我没有任何线索,请帮助我朝着正确的方向前进以获取私钥并将其转换为可读格式。提前致谢。

4

2 回答 2

1

如果要将私钥保存到文件中,请使用

byte[] privateKeyBytes = privKey.getEncoded();

这将返回 DER 编码(二进制)格式的密钥。

如果您只想在控制台上显示包含的值,只需使用 toString() 打印它:

System.out.println(privKey);
于 2012-06-14T09:43:52.840 回答
1

BouncyCastle 具有有用的PEMWriter类,您可以使用它来将私钥写入 PEM 格式的文件(这是 OpenSSH 和 curl 等工具所期望的)。

PEMWriter privatepemWriter = new PEMWriter(new FileWriter(filename)));
privatepemWriter.writeObject(privKey);
privatepemWriter.close();

否则,您可以从私钥保存字节数组,这是许多工具也使用的 DER 格式。

最后,您可以使用以下方法将其写入其他 java 程序使用的 JKS 密钥库:

KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null);
keyStore.setKeyEntry("some alias", privKey, somePassword.toCharArray(), chain[0]));
FileOutputStream fos = new FileOutputStream(filename);
keyStore.store(fos, somePassword.toCharArray());
fos.close();
于 2012-06-14T10:01:48.853 回答