Lol*_*lly 4 java ssl bouncycastle ssl-certificate private-key
我是 BouncyCastle 的新手。我有一个使用以下代码生成的私钥。
final CertAndKeyGen keypair = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
keypair.generate(1024);
final PrivateKey privKey = keypair.getPrivateKey();
Run Code Online (Sandbox Code Playgroud)
我会使用 AES 或使用 BouncyCastle 的一些支持 openssl 的算法使用密码对其进行加密。有人可以帮助我如何开始,我无法找到任何关于此的好的教程。请帮帮我。提前致谢。
如果您只想将您的私钥输出到密码短语“12345”保护的 PEM 格式和文件“privatekey.pem”,您可以使用此 BC 代码:
JceOpenSSLPKCS8EncryptorBuilder encryptorBuilder = new JceOpenSSLPKCS8EncryptorBuilder(PKCS8Generator.PBE_SHA1_3DES);
encryptorBuilder.setRandom(EntropySource.getSecureRandom());
encryptorBuilder.setPasssword("12345".toCharArray());
OutputEncryptor oe = encryptorBuilder.build();
JcaPKCS8Generator gen = new JcaPKCS8Generator(privKey,oe);
PemObject obj = gen.generate();
PEMWriter pemWrt = new PEMWriter( new FileWriter("privatekey.pem"));
pemWrt.writeObject(obj);
pemWrt.close();
然后你可以使用 openssl 获取私钥
$ openssl rsa -in privatekey.pem -check 输入 privatekey.pem 的密码: RSA 密钥正常 写入 RSA 密钥 -----开始RSA私钥----- ..... -----结束RSA私钥-----
PEMWriter 的“标准”使用不会通过密码保护您的私钥:(
如果您希望使用 AES-256 而不是 PKCS8 支持的旧 DES 变体之一来保护您的私钥,则可以使用以下方法:
public String toPem(String password) throws IOException {
StringWriter sw = new StringWriter();
try (JcaPEMWriter pemWriter = new JcaPEMWriter(sw)) {
PEMEncryptor encryptor =
new JcePEMEncryptorBuilder("AES-256-CBC").build(password);
// privateKey is a java.security.PrivateKey
JcaMiscPEMGenerator gen = new JcaMiscPEMGenerator(privateKey, encryptor);
pemWriter.writeObject(gen);
}
return sw.toString();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 openssl 验证输出。就我而言,密钥是 EC,因此使用以下命令:
$ openssl ec -in key.txt -passin pass:password -text
Run Code Online (Sandbox Code Playgroud)
根据 RSA 密钥的需要进行调整。