it-swarm.com.de

Patch pyopenssl für sslv3 Problem

Ich habe ein Problem auf einem Debian 8-System mit 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'**

Ich habe in die Bibliothek nachgesehen und versucht, /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py zu patchen

    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 mich jemand aufklären, wie ich das beheben kann? Es wäre super, wenn jemand eine Ahnung hätte. Ich habe das Problem gegoogelt und nur unvollständige Patches gefunden. Wahrscheinlich ein Fall für den Bug-Tracker, wenn dieser auch behoben ist. Ich habe dieses Problem für alle Python-Pakete.

51
wishi

Dies ist tatsächlich ein Problem mit urllib3, nicht mit pyopenssl. Debian kompiliert kürzlich OpenSSL ohne SSLv3-Unterstützung , und urllib3 nahm an, dass Unterstützung vorhanden war.

Das Problem wurde behoben in Festschreiben b9b3b0102 , das Teil der Version 1.10 von urllib3 ist.

Da Sie urllib3 als Teil von requests verwenden, der wiederum von pip verwendet wird, sollte es ausreichend sein, auf eine aktuelle Version von requests zu aktualisieren. Zum jetzigen Zeitpunkt ist die aktuelle Version 2.6.0, die das Update enthält:

# pip install requests==2.6.0

Möglicherweise tritt beim Aktualisieren von requests ein Problem auf, da das Problem mit dem Chicken-Egg-Problem besteht. Um dies zu beheben, können Sie versuchen, das Paket pyopenssl vorübergehend zu entfernen, requests zu aktualisieren und pyopenssl neu zu installieren.

Außerdem möchten Sie möglicherweise die folgende Zeile zum Aktualisieren von pip verwenden, bevor Sie versuchen, requests zu aktualisieren:

# Sudo easy_install --upgrade pip
74
sk1p

Eine andere Möglichkeit, das Problem zu beheben, ist die Verwendung 

Sudo easy_install --upgrade pip

und danach normal verwenden 

47
user3005724

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

Sudo easy_install --upgrade pip

Ich musste auch laufen:

Sudo pip uninstall pyopenssl
Sudo pip install mozdownload

Dies hat meinen Fehler behoben, vielleicht kann er anderen helfen. Ich bin hier durch googeln gekommen:

AttributeError: 'Modul'-Objekt hat kein Attribut' PROTOCOL_SSLv3 '

13
Alex Tartan

Ich bin heute mit Ansible auf dieses Problem gestoßen. Ich habe es gelöst mit: pip uninstall pyopenssl

vielleicht hilft dies jemandem in derselben Situation

6

Ich habe diese Fehlermeldung nach einem Upgrade von Ubuntu 14 auf 16 erhalten. Durch das Upgrade wurden einige Python-Pfade geändert, wodurch einige Kernpakete beschädigt wurden. Diese Antwort hat es im Wesentlichen für mich behoben.

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

Ich habe die gleichen Probleme und deinstalliere einfach die Version von requests und installiere die genaue Version mit dem folgenden Befehl.

pip install requests==2.6.0 

dann klappt es

0
cc.zhang

Ich bin mit einem neuen Xenial darauf gestoßen und hatte keine Antworten mit vielen Antworten, die ich gesehen hatte (einige habe ich wirklich nicht probiert, weil die meiste Software noch aktueller war). Was für mich endgültig gelöst wurde, war: Sudo pip install request --upgrade ... was nur eine Wendung gegenüber der anderen Request-Upgrade-Empfehlung darstellt.

0
Michael Casile