为 sslv3 问题修补 pyopenssl
Patch pyopenssl for sslv3 issue
我在使用 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,
}
有人能告诉我如何解决这个问题吗?如果有人有线索,那就太棒了。我用谷歌搜索了这个问题,只发现了不完整的补丁,而且很乱。一旦修复,也可能是错误跟踪器的案例。我对所有 Python 个包都有这个问题。
这实际上是 urllib3
的问题,而不是 pyopenssl
的问题。 Debian lately compiles OpenSSL without SSLv3 support 和 urllib3
只是假定存在支持。
问题是 fixed in commit b9b3b0102,它是 urllib3
的 1.10 版本的一部分。
由于您正在使用 urllib3
作为 requests
的一部分,requests
又被 pip
使用,更新到 [=17= 的最新版本应该就足够了].在撰写本文时,当前版本是 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
然后正常使用 pip
我收到了同样的错误。
结合之前的回答:
sudo easy_install --upgrade pip
我也不得不 运行:
sudo pip uninstall pyopenssl
sudo pip install mozdownload
这修正了我的错误,也许它可以帮助其他人。我是通过谷歌搜索来到这里的:
AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'
我 运行 今天用 Ansible 解决了这个问题。我解决了它:
pip uninstall pyopenssl
也许这会对处于相同情况的其他人有所帮助
我在从 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
我 运行 在新的 Xenial 上进行了此操作,但没有成功 w/many 我看到的答案(有些我真的没有尝试,因为我的大部分软件都是最新的)。最终为我解决的是: sudo pip install requests --upgrade ... 这只是对另一个请求升级建议的扭曲。
我遇到了同样的问题,我只是卸载了 requests
的版本,然后使用以下命令安装了准确的版本。
pip install requests==2.6.0
然后就可以了
我在使用 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,
}
有人能告诉我如何解决这个问题吗?如果有人有线索,那就太棒了。我用谷歌搜索了这个问题,只发现了不完整的补丁,而且很乱。一旦修复,也可能是错误跟踪器的案例。我对所有 Python 个包都有这个问题。
这实际上是 urllib3
的问题,而不是 pyopenssl
的问题。 Debian lately compiles OpenSSL without SSLv3 support 和 urllib3
只是假定存在支持。
问题是 fixed in commit b9b3b0102,它是 urllib3
的 1.10 版本的一部分。
由于您正在使用 urllib3
作为 requests
的一部分,requests
又被 pip
使用,更新到 [=17= 的最新版本应该就足够了].在撰写本文时,当前版本是 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
然后正常使用 pip
我收到了同样的错误。
结合之前的回答:
sudo easy_install --upgrade pip
我也不得不 运行:
sudo pip uninstall pyopenssl
sudo pip install mozdownload
这修正了我的错误,也许它可以帮助其他人。我是通过谷歌搜索来到这里的:
AttributeError: 'module' object has no attribute 'PROTOCOL_SSLv3'
我 运行 今天用 Ansible 解决了这个问题。我解决了它:
pip uninstall pyopenssl
也许这会对处于相同情况的其他人有所帮助
我在从 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
我 运行 在新的 Xenial 上进行了此操作,但没有成功 w/many 我看到的答案(有些我真的没有尝试,因为我的大部分软件都是最新的)。最终为我解决的是: sudo pip install requests --upgrade ... 这只是对另一个请求升级建议的扭曲。
我遇到了同样的问题,我只是卸载了 requests
的版本,然后使用以下命令安装了准确的版本。
pip install requests==2.6.0
然后就可以了