Saltar al contenido
ecdsa.com
Python 3.13+ ssl modulecryptography de Python

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

Cómo solucionarlo

  1. 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. 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. 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

Errores relacionados

Explorar toda la base de datos de errores de firma