Mensaje de error
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier
Lo muestran Python 3.13 y posteriores (el modo estricto está activado de forma predeterminada) y openssl verify -x509_strict. Python añade una ubicación en el código fuente, como «(_ssl.c:1082)».
Python 3.13+ ssl module — VERIFY_X509_STRICT in create_default_context(), X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER
Qué significa
Python 3.13 y posteriores ejecutan las comprobaciones X.509 estrictas de OpenSSL, y el RFC 5280 exige que los certificados emitidos por una CA lleven una extensión authorityKeyIdentifier que identifique la clave del emisor. A un certificado de tu cadena le falta, así que la verificación falla aunque la firma y el ancla de confianza estén bien.
Por qué ocurre
La herramienta de emisión no añade identificadores de clave
frecuenteLos archivos de extensiones de OpenSSL escritos a mano, algunos scripts y el software de CA interno más antiguo emiten certificados sin authorityKeyIdentifier (a menudo, también sin subjectKeyIdentifier).
El cliente se actualizó a Python 3.13 o posterior
frecuentePython 3.12 y anteriores no aplicaban comprobaciones estrictas, así que estos certificados funcionaban antes.
Certificados de larga duración de una configuración de PKI anterior
ocasionalLos certificados de dispositivos y servicios emitidos hace años, antes de que se corrigiera el perfil, siguen en uso hasta que caducan.
Cómo solucionarlo
- 1.
Confirmar qué extensión falta
Imprime las extensiones de identificador de clave del certificado hoja y de los intermedios, y ejecuta openssl verify -x509_strict para listar todos los problemas del modo estricto.
bash openssl x509 -in server.pem -noout -ext authorityKeyIdentifier,subjectKeyIdentifier openssl verify -x509_strict -CAfile ca.pem server.pem - 2.
Volver a emitir los certificados con identificadores de clave
Añade subjectKeyIdentifier = hash y authorityKeyIdentifier = keyid:always al perfil de emisión y, después, vuelve a emitir los certificados afectados.
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.
Solución provisional: quitar VERIFY_X509_STRICT
Mantiene la verificación de la cadena, de las fechas y del nombre de host, pero omite las comprobaciones de perfil del RFC 5280 en este contexto; retira este ajuste después de volver a emitir los 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