Mensagem de erro
unable to load certificate
Texto do OpenSSL 1.1.x. O OpenSSL 3.0 imprime “Could not read certificate from cert.pem” seguido de “Unable to load certificate” com U maiúsculo; o OpenSSL 3.5 e posteriores imprimem “Could not find certificate from cert.pem” e uma linha de pilha de erros de STORE routines (reproduzido no 3.0.2 e no 3.6.4). O texto varia com a versão; a falha é a mesma.
O que significa
O openssl x509 (ou outro comando que lê certificados) não conseguiu extrair um certificado do arquivo. A entrada é outro objeto PEM (chave, CSR), está na codificação binária errada ou é um texto que nem sequer é uma estrutura X.509 — o comando nem chegou a ler os campos. Como os arquivos de certificado se chamam .crt ou .cer independentemente da codificação, o nome do arquivo não diz nada aqui; só os bytes dizem.
Por que acontece
O arquivo contém uma chave ou um CSR, não um certificado
comumBlocos BEGIN PRIVATE KEY, BEGIN PUBLIC KEY ou BEGIN CERTIFICATE REQUEST não são certificados. Os CSRs, em particular, são confundidos com certificados o tempo todo — o CSR é o que você envia para a CA; o certificado é o que volta.
Certificado DER sem -inform der
comumArquivos .cer/.crt do ecossistema Windows muitas vezes são DER binário. O openssl x509 do OpenSSL 1.1 assume PEM por padrão e não encontra o envelope PEM; o OpenSSL 3 detecta DER por conta própria.
Pacote PKCS#7 / PKCS#12
ocasionalArquivos .p7b e .pfx/.p12 são contêineres que guardam certificados, não certificados avulsos. Eles precisam dos próprios comandos para serem desempacotados antes que o x509 consiga ler o conteúdo.
Como corrigir
- 1.
Identificar e depois converter
Confira o rótulo ou os primeiros bytes; converta DER para PEM, se necessário.
bash head -1 cert.file # BEGIN what? openssl x509 -inform der -in cert.der -out cert.pem # DER → PEM - 2.
Desempacotar formatos de contêiner
Extraia os certificados de pacotes PKCS#7 e PKCS#12 para PEM simples.
bash openssl pkcs7 -print_certs -in bundle.p7b -out certs.pem openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out cert.pem - 3.
Para um CSR, usar o comando req
Se o arquivo for uma solicitação de certificado, inspecione-o com req — e lembre-se de que a solicitação ainda precisa ser assinada por uma CA para virar um certificado.
bash openssl req -in request.csr -noout -text