Zum Inhalt springen
ecdsa.com
Python 3.13+ ssl modulePython cryptography

Fehlermeldung

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

Diese Meldung geben nur Clients aus, die die strikte Prüfung aktivieren: Python 3.13 und neuer standardmäßig sowie openssl verify -x509_strict. Python hängt eine Quellcode-Position wie „(_ssl.c:1082)“ an.

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

Was der Fehler bedeutet

Python 3.13+ prüft im strikten X.509-Modus von OpenSSL, der die Regel aus RFC 5280 durchsetzt, dass die Erweiterung basicConstraints eines CA-Zertifikats als kritisch markiert sein muss. Die CA in deiner Kette hat basicConstraints CA:TRUE ohne das Flag critical, deshalb lehnt OpenSSL die Kette ab, obwohl der CA vertraut wird.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Nicht konformes Zertifikat finden

    Gib basicConstraints für jede CA in der Kette aus; diejenige ohne „critical“ muss neu ausgestellt werden. openssl verify -x509_strict zeigt alle Probleme im strikten Modus.

    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.

    CA mit als kritisch markiertem basicConstraints neu ausstellen

    Signiere das CA-Zertifikat neu mit basicConstraints = critical, CA:TRUE und einer Erweiterung keyUsage. Behältst du denselben Schlüssel und dasselbe Subject bei, lassen sich bestehende Zertifikate weiterhin dagegen prüfen.

    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.

    Übergangslösung: VERIFY_X509_STRICT entfernen

    Stellt für einen einzelnen Kontext das Verhalten vor 3.13 wieder her, solange die CA korrigiert wird. Die Prüfung von Kette, Gültigkeitszeitraum und Hostname bleibt aktiv.

    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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen