Перейти к содержимому
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+ выполняет строгие проверки X.509 в OpenSSL, а 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

Связанные ошибки

Открыть всю базу ошибок подписей