модуль ‘lib’ не имеет атрибута ‘X509_V_FLAG_CB_ISSUER_CHECK’

Вопрос или проблема

Я использовал python 3.6 на своем компьютере с ubuntu и столкнулся с этой ошибкой при проведении тестирования:

CryptographyDeprecationWarning: Python 3.6 больше не поддерживается основной командой Python. Поэтому поддержка этого языка устарела в библиотеке cryptography и будет удалена в будущих релизах.
...
from OpenSSL import crypto, SSL
default:       Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1550, в <module>
default:         класс X509StoreFlags(object):
default:       Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1570, в X509StoreFlags
default:         CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
default:     AttributeError: модуль 'lib' не имеет атрибута 'X509_V_FLAG_CB_ISSUER_CHECK'

Я исследовал эту ошибку. Установил python 3.9 и затем обновил альтернативы, чтобы назначить python 3.9 в качестве основного python для использования. Затем я переустановил и обновил OpenSSL и Cryptography.

sudo pip3 install pyOpenSSL --upgrade
sudo pip3 install cryptography --upgrade

Я снова провел тестирование и все еще сталкиваюсь с той же ошибкой.

Я решил проверить папку dist-packages для python3.9 (/usr/local/lib/python3.9/dist-packages/) и понял, что OpenSSL и Cryptography нигде не находятся. Они находятся в /usr/local/lib/python3.6/dist-packages/. Может быть, это причина, почему ошибка сохраняется?

Я столкнулся с этим с pyOpenSSL==19.0.0 и смог решить это с помощью

pip3 install pyOpenSSL --upgrade

Похоже, что это связано с обновлением pip 22.2.2. Проверьте, можете ли вы обновить pyOpenSSL до 22.0.0, чтобы решить проблему.

Дайте мне знать, если это не сработает.

У меня была такая же проблема. Вам нужно обновить pip до последней версии.

  1. Удалите старую версию
sudo apt remove python3-pip 
  1. Согласно руководству по установке pip, выполните следующее:
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

Мой pip перестал работать из-за этой проблемы (я не мог даже получить версию).

Я решил эту проблему, скачав проблемный пакет с pypi.org и обновив его с помощью модуля easy_install:

python3 -m easy_install pyOpenSSL-22.0.0-py2.py3-none-any.whl

После обновления cryptography до версии 38.0.1 команда pip была полностью сломана на моей системе Linux, и я не мог ее исправить никаким образом. Я смог решить проблему только удалив строку

“CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK”

из файла /usr/lib/python3/dist-packages/OpenSSL/crypto.py

Ура! После этого pip снова заработал, и я смог понизить версию cryptography до версии, совместимой с pyOpenSSL==20.0.1:

pip uninstall cryptography

pip install –upgrade cryptography==36.0.2

У меня была такая же ошибка. Я обновил пакет pyOpenSSL до версии 22.0.0. Теперь все работает хорошо.

pyOpenSSL < 22.0.0, похоже, несовместим, поскольку они не зафиксировали пакет cryptography. Поскольку последний пакет cryptography был установлен в версии перед 22.0.0, они просто ломаются.

Соответствующая проблема на Github: https://github.com/pyca/pyopenssl/issues/1143

Предупреждение!!! если вы используете pyOpenSSL==20.0.1 и получаете эту ошибку при сборке нового образа контейнера. Обновление до pyOpenSSL==22.0.0 может решить эту проблему, но может вызвать увеличенную нагрузку на ЦП. Это приводит к потере 50% qps для нашей системы, которая обрабатывает тяжелые запросы и загрузку.

В конечном итоге мы откатили pyOpenSSL==22.0.0 до pyOpenSSL==20.0.1 и вручную установили cryptography==36.0.2, чтобы решить проблему.

Я исправил это, удалив директорию пакета openSSL python

sudo rm -R /usr/lib/python3/dist-packages/OpenSSL

Затем просто установите библиотеку OpenSSL снова

pip3 install pyOpenSSL --upgrade

Обратите внимание, когда я говорю “в какой ситуации мы сейчас находимся”, я имею в виду тот факт, что каждая версия pyOpenSSL до версии 22.0.0 несовместима с версиями cryptography начиная с 38.0.0, но pip этого не знает, поэтому не может правильно решить проблему с зависимостями.

https://github.com/pyca/pyopenssl/issues/1143#issuecomment-1246086105

В моем случае на моем Ubuntu 20.04 установлена версия pyOpenSSL 19.0.0, а версия cryptography – 38.0.3.

У меня была та же проблема. Когда это произошло, я увидел лог, похожий на этот.

Oct 26 00:59:45 d51307 certbot[4185368]:     from OpenSSL import crypto, SSL
Oct 26 00:59:45 d51307 certbot[4185368]:   Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1553, в <module>
Oct 26 00:59:45 d51307 certbot[4185368]:     класс X509StoreFlags(object):
Oct 26 00:59:45 d51307 certbot[4185368]:   Файл "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", строка 1573, в X509StoreFlags
Oct 26 00:59:45 d51307 certbot[4185368]:     CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
Oct 26 00:59:45 d51307 certbot[4185368]: AttributeError: модуль 'lib' не имеет атрибута 'X509_V_FLAG_CB_ISSUER_CHECK'
Oct 26 00:59:45 d51307 systemd[1]: certbot.service: главный процесс завершился, код=выход, статус=1/НЕУДАЧА

Затем я попробовал apt remove python3-pip и apt install python3-pip, и это помогло мне. Затем я запустил certbot, и он заработал

Сначала закомментируйте строку ниже в /usr/lib/python3/dist-packages/OpenSSL/crypto.py

CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK

Затем выполните следующие команды, чтобы обновить pip3 и pyopenssl

pip3 install pip --upgrade
pip3 install pyopenssl --upgrade

Наконец, раскомментируйте строку на первом шаге. Теперь вы должны иметь возможность использовать pip3

Мне удалось решить эту проблему, понизив библиотеку cryptography с помощью следующей команды.

pip install cryptography==36.0.0

Это кажется конфликтом зависимостей с conda, так как некоторые установленные версии пакетов несовместимы с python в базовом окружении. Чтобы убедиться, что это не вызывает вашу проблему, вы можете выполнить (в базовом окружении)

conda update --all

Это предоставит вам план обновления с разрешенными зависимостями вместе с новейшими установленными версиями и в конечном итоге разрешит конфликт использования pip с пакетом cryptography, который был разрешен в последних обновлениях conda.

После обновления conda введите pip list, и если это была корень всех проблем, вы избавитесь от этой ошибки.

Ответ или решение

Ошибка с сообщением module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK' возникает при использовании библиотеки pyOpenSSL в сочетании с библиотекой cryptography, когда версии этих библиотек несовместимы друг с другом. Давайте рассмотрим более подробно причины возникновения этой ошибки и пути их решения.

Причины ошибки

  1. Несоответствие версий библиотек:
    Ваша работающий код попадает в конфликт версий, когда pyOpenSSL с номером версии ниже 22.0.0 не поддерживает функции из cryptography, которые были введены в более поздних версиях этой библиотеки, таких как 38.0.0 и выше. Специфически, отсутствие атрибута X509_V_FLAG_CB_ISSUER_CHECK указывает на то, что используется устаревшая версия pyOpenSSL, которая не может найти необходимые атрибуты в OpenSSL.

  2. Устаревшая версия Python:
    Вы упомянули, что используете Python 3.6, который больше не поддерживается, что может быть причиной низкой поддержки библиотек, таких как cryptography, поэтому рекомендуется обновить Python до более актуальной версии, например 3.9 или 3.10.

Решения проблемы

  1. Обновление библиотек:
    Выполните обновление библиотек pyOpenSSL и cryptography до самых последних совместимых версий:

    pip install --upgrade pyOpenSSL cryptography

    Если вы сталкиваетесь с проблемами при этом, вы можете явно установить версии. Например:

    pip install pyOpenSSL==22.0.0 cryptography==36.0.2
  2. Очистка установленных пакетов:
    Если вышеуказанные шаги не помогли, вы можете удалить старые версии библиотек перед их переустановкой:

    sudo apt remove python3-pip

    Затем переустановите pip и обновите pyOpenSSL и cryptography:

    wget https://bootstrap.pypa.io/get-pip.py
    sudo python3 get-pip.py
    pip install --upgrade pyOpenSSL cryptography
  3. Настройка окружения:
    Если проблема сохраняется, рекомендуется рассмотреть использование виртуальных окружений, таких как venv или conda, что позволит вам управлять зависимостями и версиями библиотек изолированно от системы:

    python3.9 -m venv myenv
    source myenv/bin/activate
    pip install pyOpenSSL cryptography
  4. Комментирование кода (временное решение):
    Как последний шаг для временного решения, вы можете закомментировать строку, которая вызывает ошибку в файле crypto.py:

    # CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK

    После чего обновите библиотеки. Однако, это не рекомендуется как постоянное решение, так как это может вызвать непредвиденные проблемы в других частях кода.

Заключение

Ошибка module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK' вызвана несоответствием между версиями pyOpenSSL и cryptography. Для стабильной работы вашего приложения необходимо обновить эти библиотеки до совместимых версий, а также убедиться, что используемая версия Python поддерживается. Рекомендуется использовать виртуальные окружения для изоляции зависимостей и предотвращения конфликтов между библиотеками.

Оцените материал
Добавить комментарий

Капча загружается...