Pular para o conteúdo
ecdsa.com
Python 3.13+ ssl modulePython (cryptography)

Mensagem de erro

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier

Aparece no Python 3.13 e posteriores (o modo estrito vem ativado por padrão) e no openssl verify -x509_strict. O Python acrescenta uma localização no código-fonte, como “(_ssl.c:1082)”.

Python 3.13+ ssl module — VERIFY_X509_STRICT in create_default_context(), X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER

O que significa

O Python 3.13+ executa as verificações X.509 estritas do OpenSSL, e a RFC 5280 exige que certificados emitidos por uma CA tragam uma extensão authorityKeyIdentifier que identifique a chave do emissor. Um certificado da sua cadeia não tem essa extensão, então a verificação falha, embora a assinatura e a âncora de confiança estejam corretas.

Por que acontece

Como corrigir

  1. 1.

    Confirmar a extensão ausente

    Imprima as extensões de identificador de chave do certificado folha e dos intermediários e rode openssl verify -x509_strict para listar todos os problemas do modo estrito.

    bash
    openssl x509 -in server.pem -noout -ext authorityKeyIdentifier,subjectKeyIdentifier
    openssl verify -x509_strict -CAfile ca.pem server.pem
  2. 2.

    Reemitir os certificados com identificadores de chave

    Adicione subjectKeyIdentifier = hash e authorityKeyIdentifier = keyid:always ao perfil de emissão e, depois, reemita os certificados afetados.

    bash
    # Issue leaves with both key identifiers
    printf 'subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid:always\nsubjectAltName=DNS:api.example.com\n' > leaf.ext
    openssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key -days 90 -extfile leaf.ext -out server.pem
  3. 3.

    Solução temporária: desativar VERIFY_X509_STRICT

    Mantém a verificação da cadeia, das datas e do nome do host, mas pula as verificações de perfil da RFC 5280 neste contexto; desfaça a mudança depois de reemitir os certificados.

    python
    # Temporary workaround until certificates are reissued
    import ssl
    ctx = ssl.create_default_context(cafile="ca.pem")
    ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

Erros relacionados

Ver toda a base de erros de assinatura