Mensagem de erro
unable to load Public Key
Texto do OpenSSL 1.1.x; ainda é a forma mais citada. O OpenSSL 3.0 imprime “Could not read key of Public Key from cert.pem”; o OpenSSL 3.5 e posteriores, “Could not find private key of Public Key from cert.pem” (reproduzido no 3.0.2 e no 3.6.4) — a mesma falha com outra redação.
O que significa
O comando openssl tentou ler uma chave pública do arquivo indicado e não encontrou nada que reconheça como tal. O arquivo existe — o problema é o conteúdo: outro tipo de objeto (certificado, chave privada, chave SSH), a codificação errada ou algo que nem é uma chave.
Por que acontece
O arquivo é um certificado, não uma chave avulsa
comum“-----BEGIN CERTIFICATE-----” é um certificado X.509 que contém uma chave pública, mas não é uma. Comandos que esperam um SPKI avulso (-pubin) o recusam; é preciso extrair a chave antes.
Uma chave OpenSSH onde se espera PEM
comumEntradas de uma linha como “ecdsa-sha2-nistp256 AAAA... user@host” (formato authorized_keys) usam a codificação própria do OpenSSH, não PEM/DER. O OpenSSL não consegue lê-las sem conversão.
Chave privada passada com -pubin
comumA flag -pubin declara que a entrada é uma chave pública. O OpenSSL 1.1 e o 3.0 recusam “-----BEGIN PRIVATE KEY-----” com essa flag — remova a flag ou derive antes a metade pública. (O OpenSSL 3.5 e posteriores, em vez disso, leem a metade pública sem avisar.)
Arquivo DER lido como PEM
ocasionalNo OpenSSL 1.1, arquivos binários .der/.cer precisam de -inform der: a análise de dados binários como PEM não encontra nenhuma linha BEGIN e falha. O OpenSSL 3 detecta DER por conta própria.
Como corrigir
- 1.
Extrair a chave de um certificado
Um único comando gera o PEM da chave pública SPKI que os comandos com -pubin esperam.
bash openssl x509 -in cert.pem -pubkey -noout > pubkey.pem openssl pkey -pubin -in pubkey.pem -noout -text # now loads - 2.
Converter uma chave OpenSSH para PEM
O ssh-keygen exporta uma entrada no formato authorized_keys como um PEM padrão BEGIN PUBLIC KEY (SPKI) — o ssh-keygen chama esse formato de PKCS8.
bash ssh-keygen -f id_ecdsa.pub -e -m pkcs8 > pubkey.pem - 3.
Derivar a metade pública de uma chave privada
Se o arquivo for, na verdade, a chave privada, não use -pubin — derive a chave pública.
bash openssl pkey -in private.pem -pubout -out pubkey.pem