No se puede cargar la clave privada. (Rutinas PEM: PEM_read_bio: sin línea de inicio: pem_lib.c: 648: Esperando: CUALQUIER LLAVE PRIVADA)

92

Tengo un archivo .key que es un archivo de clave privada con formato PEM. No hice este archivo pero lo obtuve de alguna parte.

Quería ver su hash MD5 con la herramienta openssl como el siguiente comando.

openssl rsa -in server.key -modulus -noout

Pero esto genera el siguiente error.

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

Aquí hay algo de asn1parse del archivo .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

 ...

¿Hay algo más que pueda intentar?

tkpl
fuente
2
¿Cuál es el encabezado / pie de página exacto del archivo PEM? Puede obtener este error si está enviando una clave pública. Además, el comando que enumeró no dará el hash MD5. Dará el módulo de la clave.
gtrig
Solía scpcopiar el archivo de Windows a Ubuntu. Para solucionarlo, eliminé el archivo en Ubuntu, creé un nuevo archivo vacío allí, y usé vimy luego pegué el contenido correcto.
Ryan

Respuestas:

64

Abra el archivo de clave en Notepad ++ y verifique la codificación. Si dice UTF-8-BOM, cámbielo a UTF-8. Guarde el archivo y vuelva a intentarlo.

Robert L.
fuente
2
¿Qué pasa si estoy usando una Mac?
Ernest Zamelczyk
6
Use Visual Studio Code: ¡puede cambiar fácilmente la codificación usando la barra de herramientas inferior!
Luca Ghersi
2
¡Dios mío! ¡GRACIAS! Nunca me hubiera dado cuenta de eso por prueba y error, ¡solucionó el problema por mí!
Mikael Dyreborg Hansen
Esto fue todo para mí. ¡Gracias!
Freeman Helmuth
3
GoDaddy produce claves privadas "clave privada generada.txt" con el prefijo BOM, lo que causa este problema. Al menos en una Mac, volcar el texto clave con cat no mostraba la lista de materiales, pero mirarlo con menos sí. Usé BBEdit para eliminar la lista de materiales, pero cualquiera que pueda cambiar el formato o cortar los primeros cuatro bytes funcionará.
Seth Noble
55

Cambié el encabezado y pie de página del archivo PEM a

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

y

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

¡Por fin funciona!

tkpl
fuente
1
También puede agregar -inform pemal comando para obtener el mismo resultado. Ej openssl rsa -in server.key -modulus -noout -inform pem.
Simon Woodside
1
Compruebe stackoverflow.com/questions/54994641/… si resuelve su problema
qstack
Algo ya está funcionando correctamente con el formato "malo" (es decir, encabezados sin cambios), por lo tanto, esta es una solución improvisada, destinada a romper algo que ya estaba funcionando bien, como un proxy inverso que no falla por la falta de esos manualmente -encabezados y pies de página editados. ¡Sí!
alejandrob
32

su archivo .key contiene caracteres ilegales. puede verificar el archivo .key como este:

# file server.key

salida "server.key: UTF-8 Unicode (con BOM) text" significa que es un texto sin formato, no un archivo de clave. La salida correcta debe ser "server.key: PEM RSA private key".

use el siguiente comando para eliminar caracteres ilegales:

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

La clave new_server.key debería ser correcta.

Para más detalles, puede hacer clic aquí , gracias por la publicación.

张 俊
fuente
1
file server.keyeste comando me ayudó a solucionar el problema. Gracias.
itsHarshad
El comando tail parece haber agregado caracteres de formato extraños a mi archivo de claves. No estoy seguro de por qué sería esto.
ryanwebjackson
Esto, en combinación con la respuesta de @tkpl, parece haber eliminado los errores para mí.
ryanwebjackson
Esto me ahorró algunas horas y me ahorró mucho cabello.
Felipe Gusmao
6
> I have a .key file which is PEM formatted private key file.
> ...
> Here's some asn1parse of the .key file...

Que parezca correcto asn1parseme lleva a creer que no está codificado en PEM.


¿Hay algo más que pueda intentar?

Como parece ser ASN.1, intente:

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

Observe el -inform DERpara cambiar entre codificaciones.

jww
fuente
6

Crear certificado CA

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem
Pravind Kumar
fuente
5

Elimine cualquier espacio en blanco al comienzo del archivo .key.

johnnycardy
fuente
5

Resolución de mi lado. Cambiar la codificación a UTF8 sin BOM

Kosmo Para
fuente
2

Estoy en Windows 10 y guardé mi clave con la codificación de Windows1252 y funcionó para mí. En otra pregunta de StackOverflow, algunas personas estaban solucionando esto con UTF-8 con BOM .

En otras palabras, puede ser la codificación del archivo.

Rafael ZB Bravo
fuente
1

Puede ser que la clave privada en sí no esté presente en el archivo. También me enfrenté al mismo problema, pero el problema es que no hay una clave privada presente en el archivo.

Dhruvil Shah
fuente
1

esto podría suceder si está intentando utilizar su clave pública para crear un certificado en lugar de su clave privada. deberías usar clave privada

aris
fuente
0

Tuve el mismo problema hoy, y noté que esto ocurre cuando el propietario / grupo de archivo no es el que ejecuta la aplicación que lee la clave. Quizás también sea tu problema.

Ionut Stoica
fuente
0

Ninguna de las otras respuestas parecía correcta en mi caso, sin embargo, encontré la respuesta real aquí.

Mi id_rsaarchivo ya estaba en formato PEM, solo necesitaba agregar la .pemextensión al nombre del archivo.

Gracias a

Las posibles opciones para el openssl rsa -informparámetro son una de las siguientes:PEM DER

Un PEMarchivo codificado es una codificación de texto sin formato que se parece a:

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

Si bien DERes un formato de codificación binario.

gregn3
fuente
0

En nuestro caso, lo que causó el problema es que la clave privada que intentábamos usar estaba cifrada con una frase de contraseña.

Tuvimos que descifrar la clave privada ssh-keygen -pantes de poder usar la clave privada con la herramienta de línea de comandos openssl.

Paul Dejean
fuente
-6

¿Por qué no usar cetificate bot

yum instalar epel-release

yum instalar certbot-nginx

Obtener un certificado

certbot --nginx -d example.com -d www.example.com

Dylan B
fuente