Mensaje de error
unable to load Public Key
Texto de OpenSSL 1.1.x; sigue siendo la forma más citada. OpenSSL 3.0 imprime «Could not read key of Public Key from cert.pem», y OpenSSL 3.5 y posteriores, «Could not find private key of Public Key from cert.pem» (reproducido con 3.0.2 y 3.6.4): el mismo fallo con otra redacción.
Qué significa
El comando openssl intentó leer una clave pública del archivo indicado y no encontró nada que reconozca como tal. El archivo existe; el problema es su contenido: otro tipo de objeto (un certificado, una clave privada, una clave SSH), una codificación incorrecta o algo que ni siquiera es una clave.
Por qué ocurre
El archivo es un certificado, no una clave suelta
frecuenteUn bloque «-----BEGIN CERTIFICATE-----» es un certificado X.509 que contiene una clave pública, pero no es una clave pública. Los comandos que esperan un SPKI sin envolver (-pubin) lo rechazan; primero hay que extraer la clave.
Una clave OpenSSH donde se espera PEM
frecuenteLas entradas de una sola línea como «ecdsa-sha2-nistp256 AAAA... user@host» (formato authorized_keys) usan la codificación propia de OpenSSH, no PEM/DER. OpenSSL no puede leerlas sin convertirlas.
Clave privada pasada con -pubin
frecuenteLa opción -pubin declara que la entrada es una clave pública. Con ella, OpenSSL 1.1 y 3.0 rechazan «-----BEGIN PRIVATE KEY-----»: quita la opción o deriva antes la mitad pública. (OpenSSL 3.5 y posteriores leen en su lugar la mitad pública sin avisar).
Archivo DER leído como PEM
ocasionalEn OpenSSL 1.1, los archivos binarios .der/.cer necesitan -inform der: el análisis PEM de datos binarios no encuentra ninguna línea BEGIN y falla. OpenSSL 3 detecta DER por sí solo.
Cómo solucionarlo
- 1.
Extraer la clave de un certificado
Un solo comando genera el PEM de clave pública SPKI que esperan los comandos con -pubin.
bash openssl x509 -in cert.pem -pubkey -noout > pubkey.pem openssl pkey -pubin -in pubkey.pem -noout -text # now loads - 2.
Convertir una clave OpenSSH a PEM
ssh-keygen exporta una entrada en formato authorized_keys como un PEM estándar BEGIN PUBLIC KEY (SPKI); ssh-keygen llama a este formato PKCS8.
bash ssh-keygen -f id_ecdsa.pub -e -m pkcs8 > pubkey.pem - 3.
Derivar la mitad pública de una clave privada
Si el archivo es en realidad la clave privada, no uses -pubin: deriva la clave pública.
bash openssl pkey -in private.pem -pubout -out pubkey.pem