Não foi possível carregar a chave privada. (Rotinas PEM: PEM_read_bio: sem linha inicial: pem_lib.c: 648: Esperando: QUALQUER CHAVE PRIVADA)

94

Eu tenho um arquivo .key que é um arquivo de chave privada com formato PEM. Não fiz esse arquivo, mas consegui de algum lugar.

Eu queria ver seu hash MD5 com a ferramenta openssl como o comando abaixo.

openssl rsa -in server.key -modulus -noout

Mas isso gera um erro abaixo.

unable to load Private Key
13440:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:648:Expecting: ANY PRIVATE KEY

Aqui estão algumas asn1parse do arquivo .key.

openssl asn1parse -in server.key
0:d=0  hl=4 l= 603 cons: SEQUENCE
4:d=1  hl=2 l=   1 prim: INTEGER           :00
7:d=1  hl=3 l= 129 prim: INTEGER           :C141201603899993919CBAA56985E9C7
C6A2AF713A02F5FE88D38CEFBED9304599689280B84B0AB577A9719CA20DDA1246A894AF397A2C57
EE5A582B036CC367E3667454DCD82DBDBF187C35FE39F61C71B517DDDF576F5471B4EC2E045E0F9D
619F5616C4E832F00CBD0DBF41B4BA3CBC4B4B603AE1FE61965917DA732E0DEF
139:d=1  hl=2 l=   3 prim: INTEGER           :010001
144:d=1  hl=3 l= 128 prim: INTEGER           :1687B9AE67562CEDEBDD7A531B84CDB7
093CE138519B93C34B7F626076FF0A262B16EA71904ACB6251A39307C04ADE202055BA13DD9F1539
6123EE408183361A9BC08B9413FA360EA928E48CC3F52B33ACF2980758F02BA2139F652F30A257C2
2E45D7C25835FC4D22B9ECECC12AB632318D4F47E1EBDAD9781B96BCFF03A2D1

 ...

Posso tentar mais alguma coisa?

tkpl
fonte
2
Qual é o cabeçalho / rodapé exato do arquivo PEM? Você pode obter esse erro se estiver enviando uma chave pública. Além disso, o comando que você listou não fornecerá o hash MD5. Ele dará o módulo da chave.
gtrig
Eu costumava scpcopiar o arquivo do Windows para o Ubuntu. Para corrigir isso, apaguei o arquivo no Ubuntu, criei um novo arquivo vazio ali, usei vime colei o conteúdo correto.
Ryan

Respostas:

73

Abra o arquivo de chave no Notepad ++ e verifique a codificação. Se estiver escrito UTF-8-BOM, mude para UTF-8. Salve o arquivo e tente novamente.

Robert L.
fonte
2
E se eu estiver usando um mac?
Ernest Zamelczyk de
7
Use o código do Visual Studio - você pode facilmente alterar a codificação usando a barra de ferramentas inferior!
Luca Ghersi
2
Oh meu bom Deus! OBRIGADO! Eu nunca teria descoberto isso por tentativa e erro, consertaria o problema para mim!
Mikael Dyreborg Hansen,
Isso foi tudo para mim. Obrigado!
Freeman Helmuth
4
GoDaddy produz chaves privadas "generated-private-key.txt" prefixadas com um BOM, o que causa esse problema. Pelo menos em um Mac, despejar o texto-chave com cat não exibia o BOM, mas olhar para ele com menos sim. Usei o BBEdit para remover o BOM, mas qualquer um que possa alterar o formato ou cortar os primeiros quatro bytes funcionará.
Seth Noble
55

Mudei o cabeçalho e rodapé do arquivo PEM para

-----BEGIN RSA PRIVATE KEY-----

e

-----END RSA PRIVATE KEY-----

Finalmente, funciona!

tkpl
fonte
1
Você também pode adicionar -inform pemao comando para obter o mesmo resultado. Ex openssl rsa -in server.key -modulus -noout -inform pem.
Simon Woodside
1
Verifique stackoverflow.com/questions/54994641/… se isso resolver seu problema
qstack
Algo já está funcionando corretamente com o formato "ruim" (ou seja, cabeçalhos inalterados), então, esta é uma solução improvisada, destinada a quebrar algo que já estava funcionando bem, como um proxy reverso que não está travando por falta daqueles manualmente cabeçalhos e rodapés editados. Yipes!
alejandrob
33

seu arquivo .key contém caracteres ilegais. você pode verificar o arquivo .key assim:

# file server.key

output "server.key: UTF-8 Unicode (with BOM) text" significa que é um texto simples, não um arquivo de chave. A saída correta deve ser "server.key: PEM RSA private key".

use o comando abaixo para remover caracteres ilegais:

# tail -c +4 server.key > new_server.key

O new_server.key deve estar correto.

Para mais detalhes, você pode clicar aqui , obrigado pela postagem.

张 俊
fonte
1
file server.keyeste comando me ajudou a resolver o problema. Obrigado.
itsHarshad
O comando tail parece ter adicionado caracteres de formatação estranhos ao meu arquivo de chave. Não sei por que isso seria.
ryanwebjackson
Isso em combinação com a resposta @tkpl parece ter eliminado os erros para mim.
ryanwebjackson
Isso me economizou algumas horas e muito cabelo.
Felipe Gusmão
7

Criar certificado CA

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem
Pravind Kumar
fonte
6
> I have a .key file which is PEM formatted private key file.
> ...
> Here's some asn1parse of the .key file...

O fato de parecer OK asn1parseme leva a acreditar que não é codificado por PEM.


Posso tentar mais alguma coisa?

Porque parece ser ASN.1, tente:

$ openssl rsa -in server.key -inform DER -modulus -noout

Observe o -inform DERpara alternar entre as codificações.

jww
fonte
5

Remova qualquer espaço em branco no início do arquivo .key.

johnnycardy
fonte
5

Resolução do meu lado. Mude a codificação para UTF8 sem BOM

Kosmo Para
fonte
2

Estou no Windows 10 e salvei minha chave com a codificação Windows1252 e funcionou para mim. Em outra questão StackOverflow, algumas pessoas estavam corrigindo isso com UTF-8 com BOM .

Em outras palavras, pode ser a codificação do arquivo.

Rafael ZB Bravo
fonte
1

Pode ser que a própria chave privada não esteja presente no arquivo. Também enfrentei o mesmo problema, mas o problema é que não há uma chave privada presente no arquivo.

Dhruvil Shah
fonte
1

isso pode acontecer se você estiver tentando usar sua chave pública para criar um certificado em vez de sua chave privada. você deve usar chave privada

surge
fonte
0

Tive o mesmo problema hoje e percebi que isso ocorre quando o proprietário / grupo do arquivo não é o único que está executando o aplicativo que lê a chave. Talvez seja o seu problema também.

Ionut Stoica
fonte
0

Nenhuma das outras respostas parecia correta no meu caso, no entanto, encontrei a verdadeira resposta aqui

Meu id_rsaarquivo já estava no formato PEM, eu só precisava adicionar a .pemextensão ao nome do arquivo.

Graças a

As opções possíveis para o openssl rsa -informparâmetro são uma das seguintes:PEM DER

Um PEMarquivo codificado é uma codificação de texto simples que se parece com:

-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----

While DERé um formato de codificação binário.

gregn3
fonte
0

Em nosso caso, o que causou o problema é que a chave privada que estávamos tentando usar foi criptografada com uma senha longa.

Tivemos que descriptografar a chave privada usando ssh-keygen -pantes de usar a chave privada com a ferramenta de linha de comando openssl.

Paul Dejean
fonte