Message d’erreur
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier
Affiché par Python 3.13 et les versions ultérieures (le mode strict y est activé par défaut) ainsi que par 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_MISSING_AUTHORITY_KEY_IDENTIFIER
Ce que cela signifie
Python 3.13+ applique les contrôles X.509 stricts d’OpenSSL, et la RFC 5280 impose aux certificats émis par une AC de porter une extension authorityKeyIdentifier qui désigne la clé de l’émetteur. Un certificat de votre chaîne en est dépourvu : la vérification échoue donc, alors que la signature et l’ancre de confiance sont correctes.
Pourquoi cela se produit
L’outil d’émission n’ajoute pas d’identifiants de clé
fréquenteLes fichiers d’extensions OpenSSL écrits à la main, certains scripts et d’anciens logiciels d’AC internes émettent des certificats sans authorityKeyIdentifier (souvent aussi sans subjectKeyIdentifier).
Le client est passé à Python 3.13 ou à une version plus récente
fréquentePython 3.12 et les versions antérieures n’appliquaient pas les contrôles stricts : ces certificats fonctionnaient donc jusque-là.
Des certificats à longue durée de vie issus d’une ancienne PKI
occasionnelleLes certificats d’équipements et de services émis il y a des années, avant la correction du profil, restent en service jusqu’à leur expiration.
Comment corriger l’erreur
- 1.
Confirmer l’absence de l’extension
Affichez les extensions d’identifiant de clé du certificat feuille et des certificats intermédiaires, puis exécutez openssl verify -x509_strict pour lister tous les problèmes du mode strict.
bash openssl x509 -in server.pem -noout -ext authorityKeyIdentifier,subjectKeyIdentifier openssl verify -x509_strict -CAfile ca.pem server.pem - 2.
Réémettre les certificats avec des identifiants de clé
Ajoutez subjectKeyIdentifier = hash et authorityKeyIdentifier = keyid:always au profil d’émission, puis réémettez les certificats concernés.
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.
Contournement temporaire : retirer VERIFY_X509_STRICT
Conserve la vérification de la chaîne, des dates et du nom d’hôte, mais ignore les contrôles de profil RFC 5280 pour ce contexte ; retirez ce contournement une fois les certificats réémis.
python # Temporary workaround until certificates are reissued import ssl ctx = ssl.create_default_context(cafile="ca.pem") ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT