hel*_*ado 25 linux openssl ssl-certificate 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
Run Code Online (Sandbox Code Playgroud)
我也有一个.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
Run Code Online (Sandbox Code Playgroud)
但如果在这里指出我运行命令,如:
openssl x509 -text -inform DER -in file.cer
我明白了
Certificate:
Data:
Version: 3 (0x2)
Some more information
...
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEF
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
但这似乎与关键不起作用,因为当我跑
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
Run Code Online (Sandbox Code Playgroud)
如何获取私钥及其证书?
lar*_*sks 13
看起来你有DER格式证书而不是PEM.这就是当你提供-inform PEM命令行参数(告诉openssl期望什么输入格式)时它正常工作的原因.
您的私钥可能使用相同的编码.看起来该openssl rsa命令也接受了一个-inform参数,所以请尝试:
openssl rsa -text -in file.key -inform DER
Run Code Online (Sandbox Code Playgroud)
一个PEM编码文件是一个纯文本的编码,看起来像:
-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
虽然DER是二进制编码格式.
更新
有时密钥以PKCS#8格式(可以是PEM或DER编码)分发.试试这个,看看你得到了什么:
openssl pkcs8 -in file.key -inform der
Run Code Online (Sandbox Code Playgroud)
Aar*_*nan 12
在Windows上使用openssl时,我遇到了“期望:任何私钥”错误(Ubuntu Bash和Git Bash有相同的问题)。
问题的原因是我已使用UTF8将密钥和证书文件保存在记事本中。将两个文件重新保存为ANSI格式可以解决此问题。
ose*_*003 12
您需要使用该选项重新加密 ssh 密钥文件-m PEM。
ssh-keygen -p -f keyfile -m PEM
Run Code Online (Sandbox Code Playgroud)
。
细节:
此问题是由某些版本的 ssh-keygen 生成的加密文件格式引起的,这不是 openssl 想要的。
当我用来ssh-keygen -p -f keyfile加密密钥文件时,我遇到了同样的问题,结果如下
-----BEGIN OPENSSH PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
然后我遇到了这个问题:openssl rsa < keyfile无法与提问者相同的错误一起工作。
有一天我偶然发现另一个加密的密钥文件就像
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,xxxxxxxxx..
Run Code Online (Sandbox Code Playgroud)
并且该文件可以通过 解密openssl rsa < keyfile。
原来不同ssh-keygen的加密格式生成不同,需要各自的openssl版本来解密。
看来对于现代的openssl(我的是1+),它需要后一种格式。
所以我最终得到了以下解决方案:使用选项重新加密 ssh 密钥文件-m PEM。
ssh-keygen -p -f keyfile -m PEM
Run Code Online (Sandbox Code Playgroud)
然后输入旧密码和新密码。
该-m PEM选项将生成
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,xxxxxxxxx..
Run Code Online (Sandbox Code Playgroud)
然后我可以openssl rsa < keyfile稍后使用该文件来解密该文件。(当然,如果您在上面的 ssh-keygen 命令中输入空密码,您也会得到解密结果,但这可能不是您想要的,因为您不想在磁盘上保存解密的密钥文件)。