Zum Inhalt springen
ecdsa.com
Python ssl module (OpenSSL)Python cryptography

Fehlermeldung

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired

Identischer Wortlaut in Python mit OpenSSL 1.1.1, 3.0 und 3.5, gefolgt von einer Quellcode-Position wie „(_ssl.c:1082)“. Ein Zertifikat, dessen Gültigkeit noch nicht begonnen hat, führt zu „certificate is not yet valid“.

Python ssl module (OpenSSL) — ssl.SSLCertVerificationError, X509_V_ERR_CERT_HAS_EXPIRED (10)

Was der Fehler bedeutet

OpenSSL hat in der Kette ein Zertifikat gefunden, dessen Gültigkeit vor der aktuellen Zeit dieses Rechners endete. Meist wurde das Zertifikat des Servers nicht erneuert, oder das erneuerte wird nicht ausgeliefert; manchmal baut der Client den Pfad über ein abgelaufenes Root-Zertifikat aus einem veralteten CA-Bundle, oder seine Uhr geht falsch.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Ausgeliefertes Zertifikat ansehen

    Rufe das Zertifikat einmal mit abgeschalteter Prüfung ab, nur um es zu lesen, und prüfe notAfter (füge es in den Decoder ein). Verwende diese ungeprüfte Verbindung für nichts anderes.

    python
    import socket, ssl
    
    # Read the served certificate without verifying it, to see its dates
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
    with socket.create_connection(("api.example.com", 443)) as raw:
        with ctx.wrap_socket(raw, server_hostname="api.example.com") as tls:
            der = tls.getpeercert(binary_form=True)
    print(ssl.DER_cert_to_PEM_cert(der))   # paste into a certificate decoder
  2. 2.

    certifi oder das Bundle des Betriebssystems aktualisieren

    Ist das Zertifikat des Servers selbst in Ordnung, aktualisiere die Root-Zertifikate des Clients: pip install --upgrade certifi für Bibliotheken, die certifi verwenden, das Paket ca-certificates für das System-Bundle.

    bash
    python3 -m pip install --upgrade certifi
    python3 -c "import certifi; print(certifi.__version__, certifi.where())"
  3. 3.

    Systemuhr korrigieren

    Aktiviere NTP auf dem Client (bei Containern auf dem Host).

    bash
    date -u
    sudo timedatectl set-ntp true

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen