首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用openssl获得私钥(没有开始line:pem_lib.c:703:Expecting:任何私钥)

无法使用openssl获得私钥(没有开始line:pem_lib.c:703:Expecting:任何私钥)
EN

Stack Overflow用户
提问于 2015-07-25 19:56:38
回答 5查看 175.2K关注 0票数 41

我有一个.key文件

openssl rsa -text -in file.key

我得到了

代码语言:javascript
运行
复制
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

我得到了

代码语言:javascript
运行
复制
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

我得到了

代码语言:javascript
运行
复制
Certificate:
    Data:
        Version: 3 (0x2)
        Some more information
        ...
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEF
...
-----END CERTIFICATE-----

但这似乎不适用于关键,因为当我跑

openssl rsa -text -inform DER -in aaa010101aaa__csd_10.key

我得到了

代码语言:javascript
运行
复制
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

如何获得私钥及其证书?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-07-25 22:26:37

看起来您的证书是DER格式的,而不是PEM格式的。这就是当您提供-inform PEM命令行参数(它告诉openssl预期的输入格式)时,它正确工作的原因。

很可能您的私钥正在使用相同的编码。看起来,openssl rsa命令也接受一个-inform参数,所以请尝试:

代码语言:javascript
运行
复制
openssl rsa -text -in file.key -inform DER

PEM编码的文件是一种纯文本编码,类似于:

代码语言:javascript
运行
复制
-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----

DER是二进制编码格式。

更新

有时,密钥以PKCS#8格式分发(可以是PEM,也可以是DER编码)。试试这个,看看你得到了什么:

代码语言:javascript
运行
复制
openssl pkcs8 -in file.key -inform der
票数 24
EN

Stack Overflow用户

发布于 2018-06-12 00:37:05

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

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

票数 27
EN

Stack Overflow用户

发布于 2021-11-12 16:02:00

您需要使用-m PEM选项重新加密ssh密钥文件。

代码语言:javascript
运行
复制
ssh-keygen -p -f keyfile -m PEM

详细信息:

此问题是由某些版本的ssh-keygen生成的加密文件格式引起的,这不是openssl所需要的。

当我使用ssh-keygen -p -f keyfile加密密钥文件时,我也遇到了同样的问题,结果将是

代码语言:javascript
运行
复制
-----BEGIN OPENSSH PRIVATE KEY-----

然后我遇到了这个问题:openssl rsa < keyfile与发问者的错误不一样。

前几天我碰巧发现另一个加密的密钥文件

代码语言:javascript
运行
复制
-----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密钥文件。

代码语言:javascript
运行
复制
ssh-keygen -p -f keyfile -m PEM

然后输入旧密码和新密码。

-m PEM选项将生成

代码语言:javascript
运行
复制
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,xxxxxxxxx..

然后,我可以使用openssl rsa < keyfile对文件进行解密。(当然,如果在上面的ssh-keygen命令中输入空密码,也会得到解密结果,但这可能不是您想要的结果,因为您不希望将解密的密钥文件保存到磁盘上)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31630544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档