2015-03-11 12 views
46

bekam ich ein Problem auf einem Debian-System 8 mit Python 2.7.9-2 amd64:Patch-pyopenssl für SSLv3 Ausgabe

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

ich in das lib geprüft und versuchte,/usr/local/lib/Patch python2 0,7/dist-packages/Anfragen/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, 
} 

Könnte mir jemand aufklären, wie ich dieses Problem beheben? Es wäre super toll, wenn jemand eine Ahnung hätte. Ich habe das Problem gegoogelt und nur unvollständige Patches gefunden und es ist unordentlich. Wahrscheinlich ein Fall für den Bug-Tracker, sobald dies auch behoben ist. Ich habe dieses Problem für alle Python-Pakete.

Antwort

68

Dies ist ein Problem mit urllib3, nicht mit pyopenssl. Debian lately compiles OpenSSL without SSLv3 support und urllib3 gingen einfach davon aus, dass Unterstützung da war.

Das Problem war fixed in commit b9b3b0102, die Teil der 1.10-Version von urllib3 ist.

Wie Sie urllib3 als Teil requests verwenden, die wiederum von pip verwendet wird, soll es genug sein, um eine aktuelle Version von requests zu aktualisieren. Wie des Schreibens, ist die aktuelle Version 2.6.0, die das Update enthält:

# pip install requests==2.6.0 

Sie könnten auf ein Problem stoßen requests, wegen des Huhn-Ei-Problem zu aktualisieren. Um dies zu beheben, können Sie versuchen, das pyopenssl-Paket vorübergehend zu entfernen, requests zu aktualisieren und pyopenssl erneut zu installieren.

Zusätzlich sollten Sie die folgende Zeile verwenden pip zu aktualisieren, bevor Sie versuchen requests zu aktualisieren:

# sudo easy_install --upgrade pip 
+0

In meinem benutzerdefinierten Skript habe ich es gelöst, indem ich nach PROTOCOL_TLSv1 (anstelle von PROTOCOL_SSLv3) verschoben habe. Danke für den Hinweis @ sk1p – xliiv

+1

'' 'sudo pip installieren --upgrade Anfragen' '' hat den Trick auf debian 8.6 für mich –

45

Eine andere Möglichkeit, das Problem zu beheben

sudo easy_install --upgrade pip 

und pip verwenden normalerweise danach zu verwenden ist

+3

Nur um klar zu sein, was für mich funktionierte war das oben, und dann 'pip install requests == 2.6.0 ' –

+0

Bestätigt! Dies funktioniert in Verbindung mit 'pip install requests == 2.6.0 'wie von @Oliver Block angegeben. Danke vielmals! – woohoo

+0

Beachten Sie, dass Sie 'sudo' nicht verwenden möchten, wenn Sie in einem virtualenv sind! – mlissner

12

Ich habe den gleichen Fehler erhalten.
In Verbindung mit den bisherigen Antworten:

sudo easy_install --upgrade pip 

Ich habe auch laufen:

sudo pip uninstall pyopenssl 
sudo pip install mozdownload 

Das ist mein Fehler behoben, vielleicht kann es anderen helfen. Ich kam hier durch googeln:

5

Ich stieß auf dieses Problem heute mit Ansible. Ich löste es mit: pip uninstall pyopenssl

vielleicht wird dies jemand anderes in der gleichen Situation helfen

+0

Gilt für die gleiche Situation in Docker auch. – Abhi

+0

Das löste mein Problem, zuvor habe ich sk1p ohne Erfolg angewendet. Ich musste mzdownload nicht installieren, wie AlexTartan vorschlägt. – sanzante

2

ich diesen Fehler, die nach einem Upgrade von Ubuntu 14 bis 16. Das Upgrade einige Python Pfade geändert, die einige Kernpakete brach . This answer im Wesentlichen repariert es für mich.

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 
+0

das ist die einzige Antwort, die für mich funktioniert hat – Marcin

0

Ich lief in das auf einem neuen Xenial und war nicht erfolgreich w/vielen Antworten, die ich (einige versuche ich nicht wirklich, weil die meisten meiner Software mehr Strom war) gesehen hatte. Was es schließlich für mich gelöst hat, war: sudo pip install requests --upgrade ... was nur eine Wendung der anderen Anfrage Upgrade-Empfehlung ist.