Pular para o conteúdo
ecdsa.com
OpenSSL CLI (openssl s_client / openssl verify -purpose)CLI do OpenSSL

Mensagem de erro

verify error:num=26:unsuitable certificate purpose

Também aparece como

  • Verify return code: 26 (unsuitable certificate purpose)
  • error 26 at 0 depth lookup: unsuitable certificate purpose

O s_client imprime “verify error:num=26:…” e “Verify return code: 26 (…)”; o openssl verify imprime “error 26 at <depth> depth lookup: unsuitable certificate purpose”. O Go informa o mesmo problema como “x509: certificate specifies an incompatible key usage”.

OpenSSL CLI (openssl s_client / openssl verify -purpose) — X509_V_ERR_INVALID_PURPOSE

O que significa

Erro 26 do OpenSSL (X509_V_ERR_INVALID_PURPOSE): fora isso, a cadeia é válida, mas as extensões de um certificado não permitem a finalidade que está sendo verificada. O s_client verifica o certificado do servidor para a finalidade de servidor TLS, então um certificado cujo extendedKeyUsage lista só clientAuth (ou emailProtection) falha; o openssl verify verifica a finalidade que você passar em -purpose.

Por que acontece

Como corrigir

  1. 1.

    Ler as extensões de uso

    As extensões extendedKeyUsage, keyUsage e basicConstraints indicam para que o certificado pode ser usado; o openssl verify -purpose verifica uma finalidade específica.

    bash
    openssl x509 -in server.pem -noout -ext extendedKeyUsage,keyUsage,basicConstraints
    # Check against the purpose you need: sslserver, sslclient, smimesign, ...
    openssl verify -CAfile root.pem -purpose sslserver server.pem
  2. 2.

    Reemitir para a finalidade correta

    Um certificado de servidor TLS precisa de serverAuth no extendedKeyUsage (se a extensão estiver presente) e de digitalSignature no keyUsage.

    bash
    openssl req -new -key server.key -out server.csr -subj "/CN=api.example.com" \
      -addext "subjectAltName=DNS:api.example.com" -addext "extendedKeyUsage=serverAuth"

Erros relacionados

Ver toda a base de erros de assinatura