web-dev-qa-db-ja.com

sslv3の問題に対するpyopensslのパッチ

Debian 8システムでpython 2.7.9-2 AMD64:

    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'**

Libにチェックインし、/ 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パッケージについてこの問題があります。

52
wishi

これは、実際にはpyopensslではなく、urllib3の問題です。 Debian 最近SSLv3サポートなしでOpenSSLをコンパイルします 、およびurllib3は、サポートがあると仮定しました。

問題は commit b9b3b0102で修正済み であり、これはurllib3の1.10リリースの一部です。

requestsの一部としてurllib3を使用しているため、これはpipによって使用されるため、requestsの最新バージョンに更新するだけで十分です。執筆時点で、現在のバージョンは修正を含む2.6.0です。

# pip install requests==2.6.0

Chicken-Eggの問題のため、requestsのアップグレードで問題が発生する場合があります。これを修正するには、pyopensslパッケージを一時的に削除し、requestsをアップグレードして、pyopensslを再インストールします。

さらに、pipを更新する前に、次の行を使用してrequestsを更新することもできます。

# Sudo easy_install --upgrade pip
74
sk1p

問題を修正する別の方法は、使用することです

Sudo easy_install --upgrade pip

その後、通常どおりpipを使用します

47
user3005724

同じエラーが発生しました。
前の回答と併せて:

Sudo easy_install --upgrade pip

私も実行しなければなりませんでした:

Sudo pip uninstall pyopenssl
Sudo pip install mozdownload

これは私のエラーを修正しました。おそらく他の人を助けることができます。私はグーグルでここに来ました:

AttributeError: 'module'オブジェクトには属性 'PROTOCOL_SSLv3'がありません

14
Alex Tartan

今日、Ansibleでこの問題に遭遇しました。私はそれを解決しました:pip uninstall pyopenssl

多分これは同じ状況の他の誰かを助けるでしょう

6

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
3
Cerin

同じ問題に遭遇し、requestsのバージョンをアンインストールし、次のコマンドを使用して正確なバージョンをインストールします。

pip install requests==2.6.0

それから動作します

1
cc.zhang

私は新しいXenialでこれに遭遇し、見た多くの答えに失敗しました(私のソフトウェアのほとんどがより最新だったので、私は実際に試していませんでした)。最終的にそれを解決したのは:Sudo pip install requests --upgrade ...これは、他のリクエストアップグレードの推奨事項の単なるひねりです。

0
Michael Casile