Fehlermeldung
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier
Wird von Python 3.13 und neuer (dort ist der strikte Modus standardmäßig aktiv) und von openssl verify -x509_strict ausgegeben. 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_MISSING_AUTHORITY_KEY_IDENTIFIER
Was der Fehler bedeutet
Python 3.13+ führt die strikten X.509-Prüfungen von OpenSSL aus, und RFC 5280 verlangt, dass von einer CA ausgestellte Zertifikate eine Erweiterung authorityKeyIdentifier enthalten, die den Schlüssel des Ausstellers benennt. Einem Zertifikat in deiner Kette fehlt sie, deshalb schlägt die Prüfung fehl, obwohl Signatur und Vertrauensanker in Ordnung sind.
Warum der Fehler auftritt
Das ausstellende Tool fügt keine Schlüsselkennungen hinzu
häufigVon Hand geschriebene OpenSSL-Erweiterungsdateien, manche Skripte und ältere interne CA-Software stellen Zertifikate ohne authorityKeyIdentifier aus (oft auch ohne subjectKeyIdentifier).
Der Client wurde auf Python 3.13+ aktualisiert
häufigPython 3.12 und älter wendeten keine strikten Prüfungen an, deshalb funktionierten diese Zertifikate bisher.
Langlebige Zertifikate aus einem früheren PKI-Aufbau
gelegentlichGeräte- und Dienstzertifikate, die vor Jahren ausgestellt wurden, bevor das Profil korrigiert war, bleiben bis zu ihrem Ablauf in Gebrauch.
So behebst du den Fehler
- 1.
Fehlende Erweiterung bestätigen
Gib die Erweiterungen mit den Schlüsselkennungen des Leaf-Zertifikats und der Zwischenzertifikate aus und führe openssl verify -x509_strict aus, um jedes Problem des strikten Modus aufzulisten.
bash openssl x509 -in server.pem -noout -ext authorityKeyIdentifier,subjectKeyIdentifier openssl verify -x509_strict -CAfile ca.pem server.pem - 2.
Zertifikate mit Schlüsselkennungen neu ausstellen
Ergänze das Ausstellungsprofil um subjectKeyIdentifier = hash und authorityKeyIdentifier = keyid:always und stelle dann die betroffenen Zertifikate neu aus.
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.
Übergangslösung: VERIFY_X509_STRICT entfernen
Behält die Prüfung von Kette, Gültigkeitszeitraum und Hostname bei, überspringt für diesen Kontext aber die Profilprüfungen nach RFC 5280; nimm die Änderung nach dem Neuausstellen wieder zurück.
python # Temporary workaround until certificates are reissued import ssl ctx = ssl.create_default_context(cafile="ca.pem") ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT