本文へスキップ
ecdsa.com
Python 3.13+ ssl modulePython の cryptography

エラーメッセージ

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Missing Authority Key Identifier

Python 3.13 以降(厳格モードがデフォルトで有効)と openssl verify -x509_strict で表示されます。Python は「(_ssl.c:1082)」のようなソースの位置を付け加えます。

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

このエラーの意味

Python 3.13 以降は OpenSSL の厳格な X.509 チェックを実行します。RFC 5280 は、CA が発行する証明書に、発行者の鍵を示す authorityKeyIdentifier 拡張を含めることを必須としています。チェーン内のある証明書にこの拡張がないため、署名にもトラストアンカーにも問題がないにもかかわらず、検証が失敗します。

発生する理由

修正方法

  1. 1.

    欠けている拡張を確認する

    リーフ証明書と中間証明書の鍵識別子の拡張を出力し、openssl verify -x509_strict を実行して、厳格モードで検出される問題をすべて一覧表示してください。

    bash
    openssl x509 -in server.pem -noout -ext authorityKeyIdentifier,subjectKeyIdentifier
    openssl verify -x509_strict -CAfile ca.pem server.pem
  2. 2.

    鍵識別子を含めて証明書を再発行する

    発行プロファイルに subjectKeyIdentifier = hash と authorityKeyIdentifier = keyid:always を追加してから、影響を受ける証明書を再発行してください。

    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. 3.

    一時的な回避策:VERIFY_X509_STRICT をクリアする

    チェーン、日付、ホスト名の検証は維持したまま、このコンテキストに限って RFC 5280 のプロファイルチェックを省略します。証明書を再発行したら削除してください。

    python
    # Temporary workaround until certificates are reissued
    import ssl
    ctx = ssl.create_default_context(cafile="ca.pem")
    ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

関連するエラー

署名エラーデータベースをすべて見る