繁体   English   中英

JAVA:如何使用密码保护将私钥保存在pem文件中

[英]JAVA: How to save a private key in a pem file with password protection

我试图将私钥保存在pem文件中,并使用密码保护。 问题是,创建了pem文件,我甚至可以用openssl打开它,但是没有密码问题!

这是代码:

KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(2048);
KeyPair keypair = keygen.generateKeyPair();

PrivateKey privKey = keypair.getPrivate();

PKCS8Generator encryptorBuilder = new PKCS8Generator(privKey);
encryptorBuilder.setPassword("testing".toCharArray());
PEMWriter writer = new PEMWriter(new FileWriter(new File("pk.pem")));
PemObject obj = encryptorBuilder.generate();

writer.writeObject(obj);
writer.flush();
writer.close();

执行后,我尝试打开pk.pem文件

openssl rsa -in pk.pem -check

它给出了:

RSA key ok
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
(... some key appears here ...)
-----END RSA PRIVATE KEY-----

在访问私钥之前,有人要求输入密码! 有人可以帮帮我吗?

那么你应该仔细阅读BouncyCastle文档。 它声明了您使用的构造函数:

// Constructor for an unencrypted private key PEM object.
PKCS8Generator(java.security.PrivateKey key)

// Constructor for an encrypted private key PEM object.
PKCS8Generator(java.security.PrivateKey key, java.lang.String algorithm, java.lang.String provider)

因此,您正在使用构造函数来创建未加密的PKCS8Generator实例。 您设置的密码无效。

根据文档使用其他构造函数之一来创建加密实例。

注意:问题中的代码需要过时版本的BouncyCastle(1.4x?),因为当前版本(1.5x)具有不同的构造函数,与本答案中提供的版本不兼容。


对于较新的版本,请使用:

import org.bouncycastle.openssl.jcajce.JcaPEMWriter;

JcaPEMWriter writer = new JcaPEMWriter(new PrintWriter(System.out));
writer.writeObject(sk);
writer.close();

当然可能用任何其他Writer替换PrintWriter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM