为sslv3问题修补pyopenssl
我使用python 2.7.9-2 amd64在Debian 8系统上遇到问题:
marius@pydev:/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'**
我检查了这个库,并试图修补/usr/local/lib/python2.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, }
有人能教我怎么解决这个问题吗? 如果有人有线索,这将是超级棒的。 我GOOGLE了这个问题,只发现不完整的补丁,这是凌乱的。 一旦这个问题得到解决,可能也是bug追踪器的一个案例。 我有这个问题的所有Python包。
这实际上是urllib3
的问题,而不是pyopenssl
。 Debian 最近编译OpenSSL没有SSLv3的支持 ,而urllib3
只是假设支持在那里。
这个问题在提交b9b3b0102(这是urllib3的1.10版本的一部分)中得到urllib3
。
由于您正在使用urllib3
作为requests
一部分,而这些requests
又被pip
,所以更新到最新版本的requests
应该足够了。 截至撰写,目前的版本是2.6.0,其中包含修复:
# pip install requests==2.6.0
由于鸡蛋问题,您可能会遇到升级requests
问题。 要解决这个问题,你可以尝试暂时删除pyopenssl
包,升级requests
并重新安装pyopenssl
。
另外,您可能希望在尝试更新requests
之前使用以下行来更新pip
:
# sudo easy_install --upgrade pip
解决这个问题的另一个方法是使用
sudo easy_install --upgrade pip
然后通常使用点
我收到了同样的错误。
结合以前的答案:
sudo easy_install --upgrade pip
我也必须运行:
sudo pip uninstall pyopenssl sudo pip install mozdownload
这固定了我的错误,也许它可以帮助别人。 我通过Googlesearch来到这里:
AttributeError:'模块'对象没有属性'PROTOCOL_SSLv3'
今天我和Ansible遇到了这个问题。 我解决了它: pip uninstall pyopenssl
也许这会帮助其他人在相同的情况下
从Ubuntu 14升级到16后,我收到了这个错误。升级改变了一些Pythonpath,这打破了一些核心软件包。 这个答案基本上解决了我的问题。
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
我遇到了一个新的Xenial,并没有成功,有很多我见过的答案(有些我真的没有尝试,因为我的软件大部分是最新的)。 终于为我解决的是:sudo pip安装请求 – 升级…这只是对其他请求升级build议的扭曲。