繁体   English   中英

无法使用 openssl 获取私钥(没有开始行: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

但是,如果如此处所指出的我会运行如下命令:

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

在Windows上使用openssl时,我遇到了“Expecting:ANY PRIVATE KEY”错误(Ubuntu Bash和Git Bash有同样的问题)。

问题的原因是我使用UTF8在记事本中保存了密钥和证书文件。 以ANSI格式重新保存这两个文件解决了这个问题。

在我执行openssl pkcs12 -export -out cacert.pkcs12 -in testca/cacert.pem ,我收到以下消息:

无法加载私钥140707250050712:错误:0906D06C:PEM例程:PEM_read_bio:无开始行:pem_lib.c:701:期待:任何私钥

通过提供密钥文件和命令来解决这个问题。 交换机是-inkey inkeyfile.pem

我的两分钱:在运行带有根CA证书的openssl命令时,在RHEL7.3中遇到了相同的错误消息。 原因是,从AD服务器下载证书时,编码被选为DER而不是Base64。 为新证书下载选择正确版本的编码后,错误已解决

希望这有助于新用户:-)

您需要使用-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 the 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 命令中输入空密码,你也会得到解密的结果,但这可能不是你想要的,因为你不想在磁盘上保存解密的密钥文件)。

暂无
暂无

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

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