Java 从OpenSSL PEM编码密钥重构密钥对

Java 从OpenSSL PEM编码密钥重构密钥对,java,ssl,rsa,private-key,pkcs#8,Java,Ssl,Rsa,Private Key,Pkcs#8,我有一个使用OpenSSL从以前的应用程序创建的密钥,其中包含以下命令: openssl-req-nodes-newkey rsa:2048-keyout root.key\ -out root.csr-config./openssl.cnf 我将其更改为PKCS8密钥,因为我需要在Java中将该密钥用于: opensslpkcs8-topk8-nocrypt-in-pkcs1\u key\u文件-out-pkcs8\u key.pem 据我所知,这是可行的,因为我可以用它创建SSLCont

我有一个使用OpenSSL从以前的应用程序创建的密钥,其中包含以下命令:

openssl-req-nodes-newkey rsa:2048-keyout root.key\
-out root.csr-config./openssl.cnf
我将其更改为PKCS8密钥,因为我需要在Java中将该密钥用于:

opensslpkcs8-topk8-nocrypt-in-pkcs1\u key\u文件-out-pkcs8\u key.pem
据我所知,这是可行的,因为我可以用它创建SSLContext。我在重新创建
密钥对
对象以执行其他操作时遇到问题。我试过:

Path privateKeyPath=Path.get(“root.key.pem”);
File privateKeyFile=新文件(System.getProperty(“user.dir”)+File.separator+“ue.key.pem”);
byte[]bytes=Files.readAllBytes(privateKeyPath);
PKCS8EncodedKeySpec ks=新的PKCS8EncodedKeySpec(字节);
BufferedReader br=新的BufferedReader(新文件读取器(privateKeyPath.toFile());
PEMParser PEMParser=newpemparser(newfilereader(privateKeyFile));
PrivateKeyInfo PrivateKeyInfo=(PrivateKeyInfo)pemParser.readObject();/?????
我见过其他类似的代码,在那里他们做了
pemParser.readObject
,对象的类型是
peencryptedkeypair
,或者他们使用转换器来
getKeyPair()
,但是当我调用
readObject
时,我的对象的类型是
PrivateKeyInfo
,所以我也不能调用
getKeyPair


使用OpenSSL命令更改PKCS8密钥,或者尝试重建
密钥对
,是否有我遗漏的步骤

还可以看到,,,等等。您有两个或三个选择:(1a)读取PKCS8 PEM,剥离头部和尾部并将base64转换为DER,在标准JCE
KeyFactory
中的
PKCS8EncodedKeySpec
中使用DER。(1b)使用
openssl PKCS8
将PKCS8 PEM文件转换为DER文件,读取DER文件并继续1a(2)使用BC读取和解析PEM文件并转换为内部密钥对象(在最新版本中是一个单独的步骤)。仅供参考:
openssl-req-newkey
在1.0.0以上版本(自2010年起)中已经写入了PKCS8,无论是否加密,您都不需要转换它,除非您使用的是非常旧的系统。“…据我所知,这是可行的,因为我能够创建SSLContext…”。我对此表示怀疑。