Openssl 将PEM传统私钥转换为PKCS8私钥
我得到了一个PEM文件,其中包含证书和pub/私钥。具体来说,它包括标题Openssl 将PEM传统私钥转换为PKCS8私钥,openssl,certificate,Openssl,Certificate,我得到了一个PEM文件,其中包含证书和pub/私钥。具体来说,它包括标题 -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- -----BEGIN RSA PUBLIC KEY----- -----END RSA PUBLIC KEY----- 按照特定的顺序 我的理解是,在BEGIN
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
按照特定的顺序
我的理解是,在BEGIN RSA PRIVATE KEY
头之后没有头,即此pem文件包含一个传统格式(PKCS1)的私钥,没有加密
我需要将此私钥转换为DER编码的PKCS8未加密格式,以用于java服务器代码,特别是PKCS8EncodedKeySpec。我用rsa和pkcs8命令尝试了OpenSSL,但没有成功。如果有更简单的方法,就不需要使用openssl
具体而言:
openssl rsa -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem
openssl rsa -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem -pubin openssl pkcs8 -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem -nocrypt
我也尝试过指定通知和输出,但没有成功
user@ubuntu:~/TestCerts$ openssl rsa -in IServer_Key.pem -out IServer_Key.pkcs8.pem -pubin
unable to load Public Key
5925:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:
Expecting: PUBLIC KEY
user@ubuntu:~/TestCerts$ openssl rsa -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem
unable to load Private Key
5993:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:
5993:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:828:
5993:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:748:Field=n, Type=RSA
5993:error:0D09A00D:asn1 encoding routines:d2i_PrivateKey:ASN1 lib:d2i_pr.c:99:
5993:error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:125:
user@ubuntu:~/TestCerts$ openssl pkcs8 -in IServer_Key.orig.prikey.pem -out IServer_Key.pkcs8.pem -nocrypt
Error decrypting key
6022:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:
Expecting: PRIVATE KEY
如果您有任何帮助,我们将不胜感激。请尝试使用以下命令。我还没试过,但我觉得应该行得通
opensslpkcs8-topk8-notify PEM-outform DER-in filename-out filename-nocrypt
要使用openssl将私钥从PKCS#1转换为PKCS#8,请执行以下操作:
# openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in pkcs1.key -out pkcs8.key
只要您拥有问题中所述的PEM(文本格式)PKCS#1密钥,这将起作用。我删除了java标记,因为它完全不局限于java,希望它能获得更广泛的听众。我认为大多数OpenSSL命令都希望每个文件都有一个对象(有些是免提的)。创建第二个文件,只向其中添加私钥(包括
----BEGIN-RSA私钥------
和----END-RSA私钥------
)。然后尝试您的命令。这个问题似乎属于Stack Exchange网络中的另一个站点,因为它与编程无关。也许。这给了我:解密密钥140139164128912时出错:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:PEM_lib.c:701:期望:私钥在使用相同的公钥之前和之后都使用私钥对吗?只是一个亮点-使用nocrypt不是最佳实践,应该尽可能避免!Doco here-这意味着输出一个在文本编辑器中无法读取的文件吗?所以这只是Nilesh答案的副本吗?@FranklinYu这里有一个区别;输出文件的格式。不过,如果Sergiu能够解释为什么这比现有答案更好/不同,那就太好了。Peter询问了作为输出的DER键。-outform
应该是DER