我有一个.key文件
openssl rsa -text -in file.key
我得到了
unable to load Private Key
140000419358368:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY
另外,我有一个.cer文件,当我这样做的时候
openssl x509 -text -in file.cer
我得到了
unable to load certificate
140387178489504:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
但是,如果像指向的here一样,我运行的命令如下:
openssl x509 -text -inform DER -in file.cer
我得到了
Certificate:
Data:
Version: 3 (0x2)
Some more information
...
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEF
...
-----END CERTIFICATE-----
但这似乎不适用于关键,因为当我跑
openssl rsa -text -inform DER -in aaa010101aaa__csd_10.key
我得到了
unable to load Private Key
140004844304032:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1337:
140004844304032:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:849:
140004844304032:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:769:Field=version, Type=RSA
140004844304032:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
140004844304032:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1337:
140004844304032:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:849:
140004844304032:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:769:Field=version, Type=PKCS8_PRIV_KEY_INFO
如何获得私钥及其证书?
发布于 2015-07-25 22:26:37
看起来您的证书是DER
格式的,而不是PEM
格式的。这就是当您提供-inform PEM
命令行参数(它告诉openssl预期的输入格式)时,它正确工作的原因。
很可能您的私钥正在使用相同的编码。看起来,openssl rsa
命令也接受一个-inform
参数,所以请尝试:
openssl rsa -text -in file.key -inform DER
PEM
编码的文件是一种纯文本编码,类似于:
-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----
而DER
是二进制编码格式。
更新
有时,密钥以PKCS#8格式分发(可以是PEM,也可以是DER编码)。试试这个,看看你得到了什么:
openssl pkcs8 -in file.key -inform der
发布于 2018-06-12 00:37:05
在Windows上使用openssl时,我遇到了“Expecting:”错误(Ubuntu和Git有相同的问题)。
造成此问题的原因是我使用UTF8将密钥和证书文件保存在记事本中。以ANSI格式解析这两个文件解决了这个问题。
发布于 2021-11-12 16:02:00
您需要使用-m PEM
选项重新加密ssh密钥文件。
ssh-keygen -p -f keyfile -m PEM
。
详细信息:
此问题是由某些版本的ssh-keygen生成的加密文件格式引起的,这不是openssl所需要的。
当我使用ssh-keygen -p -f keyfile
加密密钥文件时,我也遇到了同样的问题,结果将是
-----BEGIN OPENSSH PRIVATE KEY-----
然后我遇到了这个问题:openssl rsa < keyfile
与发问者的错误不一样。
前几天我碰巧发现另一个加密的密钥文件
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,xxxxxxxxx..
这个文件可以被openssl rsa < keyfile
解密。
结果表明,不同的ssh-keygen
产生不同的加密格式,需要各自的openssl版本来解密。
对于现代的openssl (我的是1+)来说,它需要后一种格式。
因此,我得到了以下解决方案:用-m PEM
选项重新加密ssh密钥文件。
ssh-keygen -p -f keyfile -m PEM
然后输入旧密码和新密码。
-m PEM
选项将生成
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,xxxxxxxxx..
然后,我可以使用openssl rsa < keyfile
对文件进行解密。(当然,如果在上面的ssh-keygen命令中输入空密码,也会得到解密结果,但这可能不是您想要的结果,因为您不希望将解密的密钥文件保存到磁盘上)。
https://stackoverflow.com/questions/31630544
复制相似问题