无法使用 openssl 获取私钥(没有开始 line:pem_lib.c:703:Expecting: ANY PRIVATE KEY)
Can't get private key with openssl (no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY)
我有一个 .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
如何获取私钥和证书?
您的证书似乎是 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
我的两分钱:
在 RHEL7.3 中遇到相同的错误消息,而 运行 带有根 CA 证书的 openssl 命令。原因是,从 AD 服务器下载证书时,编码选择为 DER 而不是 Base64。一旦为新证书下载选择了正确的编码版本,错误就解决了
希望这对新用户有帮助 :-)
在执行 openssl pkcs12 -export -out cacert.pkcs12 -in testca/cacert.pem
时,我收到以下消息:
unable to load private key 140707250050712:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: ANY
PRIVATE KEY`
通过提供密钥文件和命令解决了这个问题。开关是-inkey inkeyfile.pem
我在 Windows 上使用 openssl 时 运行 进入 'Expecting: ANY PRIVATE KEY' 错误(Ubuntu Bash 和 Git Bash有同样的问题)。
问题的原因是我使用 UTF8 将密钥和证书文件保存在记事本中。以 ANSI 格式重新保存这两个文件解决了问题。
您需要使用 -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
does not work with same error as the questioner.
前几天我碰巧发现另一个加密的密钥文件是这样的
-----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命令中输入空密码,你也会得到解密结果,但这可能不是你想要的,因为你不想将解密后的密钥文件保存在磁盘上)。
我有一个 .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
如何获取私钥和证书?
您的证书似乎是 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
我的两分钱: 在 RHEL7.3 中遇到相同的错误消息,而 运行 带有根 CA 证书的 openssl 命令。原因是,从 AD 服务器下载证书时,编码选择为 DER 而不是 Base64。一旦为新证书下载选择了正确的编码版本,错误就解决了
希望这对新用户有帮助 :-)
在执行 openssl pkcs12 -export -out cacert.pkcs12 -in testca/cacert.pem
时,我收到以下消息:
unable to load private key 140707250050712:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: ANY PRIVATE KEY`
通过提供密钥文件和命令解决了这个问题。开关是-inkey inkeyfile.pem
我在 Windows 上使用 openssl 时 运行 进入 'Expecting: ANY PRIVATE KEY' 错误(Ubuntu Bash 和 Git Bash有同样的问题)。
问题的原因是我使用 UTF8 将密钥和证书文件保存在记事本中。以 ANSI 格式重新保存这两个文件解决了问题。
您需要使用 -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
does not work with same error as the questioner.
前几天我碰巧发现另一个加密的密钥文件是这样的
-----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命令中输入空密码,你也会得到解密结果,但这可能不是你想要的,因为你不想将解密后的密钥文件保存在磁盘上)。