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
A ferramenta de emissão não adiciona identificadores de chave
comumArquivos de extensões do OpenSSL escritos à mão, alguns scripts e softwares de CA interna mais antigos emitem certificados sem authorityKeyIdentifier (muitas vezes também sem subjectKeyIdentifier).
O cliente foi atualizado para o Python 3.13+
comumO Python 3.12 e anteriores não aplicavam as verificações estritas, por isso esses certificados funcionavam.
Certificados de longa duração de uma configuração anterior da PKI
ocasionalCertificados de dispositivos e de serviços emitidos anos atrás, antes da correção do perfil, continuam em uso até expirarem.
Como corrigir
- 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.
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.
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