Aller au contenu
ecdsa.com
Python 3.13+ ssl modulecryptography (Python)

Message d’erreur

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Basic Constraints of CA cert not marked critical

Seuls les clients qui activent la vérification stricte affichent ce message : Python 3.13 et les versions ultérieures par défaut, ainsi qu’openssl verify -x509_strict. Python ajoute un emplacement dans le code source, comme « (_ssl.c:1082) ».

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

Ce que cela signifie

Python 3.13+ vérifie avec le mode X.509 strict d’OpenSSL, qui applique la règle de la RFC 5280 selon laquelle l’extension basicConstraints d’un certificat d’AC doit être marquée critique. L’AC de votre chaîne a basicConstraints CA:TRUE sans l’indicateur critical, donc OpenSSL rejette la chaîne alors même que l’AC est approuvée.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Trouver le certificat non conforme

    Affichez basicConstraints pour chaque AC de la chaîne ; celle qui n’a pas « critical » doit être réémise. openssl verify -x509_strict affiche tous les problèmes du mode strict.

    bash
    openssl x509 -in ca.pem -noout -ext basicConstraints
    # X509v3 Basic Constraints:            <- no "critical" here is the problem
    #     CA:TRUE
    openssl verify -x509_strict -CAfile ca.pem server.pem
  2. 2.

    Réémettre l’AC avec une extension basicConstraints critique

    Re-signez le certificat d’AC avec basicConstraints = critical, CA:TRUE et une extension keyUsage. Conserver la même clé et le même sujet permet aux certificats existants de se vérifier par rapport à lui.

    bash
    openssl req -x509 -new -key ca.key -days 3650 -subj "/CN=Example Private CA" \
      -addext "basicConstraints=critical,CA:TRUE" \
      -addext "keyUsage=critical,keyCertSign,cRLSign" \
      -out ca.pem
  3. 3.

    Contournement temporaire : retirer VERIFY_X509_STRICT

    Rétablit le comportement antérieur à Python 3.13 pour un seul contexte, le temps de corriger l’AC. La vérification de la chaîne, des dates de validité et du nom d’hôte reste active.

    python
    # Temporary workaround until the CA is reissued (chain, dates and name are still checked)
    import ssl
    ctx = ssl.create_default_context(cafile="ca.pem")
    ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

Erreurs associées

Parcourir toute la base de données des erreurs de signature