Подтвердить что ты не робот

Патч pyopenssl для проблемы sslv3

У меня возникла проблема с системой Debian 8 с python 2.7.9-2 amd64:

    [email protected]:/usr/lib/python2.7/dist-packages/urllib3/contrib$ pip search doo
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 356, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2476, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2190, in load
    ['__name__'])
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 74, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/lib/python2.7/dist-packages/pip/vcs/mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/usr/lib/python2.7/dist-packages/pip/download.py", line 22, in <module>
    import requests, six
  File "/usr/local/lib/python2.7/dist-packages/requests/__init__.py", line 53, in <module>
    from .packages.urllib3.contrib import pyopenssl
  File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 73, in <module>
    ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,
**AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'**

Я зарегистрировался в lib и попытался установить файл /usr/local/lib/python 2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py

    from .. import connection
from .. import util

__all__ = ['inject_into_urllib3', 'extract_from_urllib3']

# SNI only *really* works if we can read the subjectAltName of certificates.
HAS_SNI = SUBJ_ALT_NAME_SUPPORT

# Map from urllib3 to PyOpenSSL compatible parameter-values.
_openssl_versions = {
    ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD,
    **ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,**
    ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD,
}
_openssl_verify = {
    ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE,
    ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER,
    ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER
                       + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
}

Может ли кто-нибудь просветить меня, как я могу это исправить? Было бы здорово, если бы у кого-то была подсказка. Я искал эту проблему и нашел только неполные заплатки, и это беспорядочно. Вероятно, случай для отслеживателя ошибок, как только это исправлено. У меня есть эта проблема для всех пакетов Python.

4b9b3361

Ответ 1

На самом деле это проблема с urllib3, а не с pyopenssl. Debian в последнее время компилирует OpenSSL без поддержки SSLv3, а urllib3 просто предположил, что поддержка там была.

Проблема была исправлена ​​в commit b9b3b0102, которая является частью выпуска 1.10 urllib3.

Поскольку вы используете urllib3 как часть requests, который, в свою очередь, используется pip, этого должно быть достаточно для обновления до последней версии requests. Начиная с записи, текущая версия версии 2.6.0 содержит исправление:

# pip install requests==2.6.0

Вы можете столкнуться с проблемой обновления requests из-за проблемы с куриным яйцом. Чтобы исправить это, вы можете попытаться временно удалить пакет pyopenssl, обновить requests и переустановить pyopenssl.

Кроме того, вы можете использовать следующую строку для обновления pip, прежде чем пытаться обновить requests:

# sudo easy_install --upgrade pip

Ответ 2

Другой способ устранить проблему - использовать

sudo easy_install --upgrade pip

и обычно используйте pip после

Ответ 3

Я получил ту же ошибку.
В сочетании с предыдущими ответами:

sudo easy_install --upgrade pip

Мне также пришлось запускать:

sudo pip uninstall pyopenssl
sudo pip install mozdownload

Это фиксировало мою ошибку, возможно, это может помочь другим. Я пришел сюда через googling:

AttributeError: объект 'module' не имеет атрибута 'PROTOCOL_SSLv3'

Ответ 4

Сегодня я столкнулся с этой проблемой с Ansible. Я решил это с помощью: pip uninstall pyopenssl

возможно, это поможет кому-то еще в той же ситуации

Ответ 5

Я получил эту ошибку после обновления с Ubuntu с 14 по 16. Обновление изменило некоторые пути Python, которые разбили некоторые основные пакеты. Этот ответ по существу исправил его для меня.

sudo apt-get purge python-pkg-resources
sudo apt-get -f install
sudo rm -Rf /usr/local/bin/pip
sudo apt-get install python-pip
sudo pip install -U pip

Ответ 6

Я столкнулся с этим на новом Xenial и не смог получить много ответов, которые я видел (некоторые из них я действительно не пробовал, потому что большая часть моего программного обеспечения была более актуальной). Что окончательно разрешило это для меня было: sudo pip install requests --upgrade..., который является просто поворотным в другой рекомендации по обновлению запроса.