web-dev-qa-db-fra.com

Correctif pyopenssl pour le problème sslv3

J'ai un problème sur un système Debian 8 avec 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'**

J'ai consulté la bibliothèque et essayé de corriger /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,
}

Quelqu'un pourrait-il m'expliquer comment je peux résoudre ce problème? Ce serait génial si quelqu'un avait un indice. J'ai googlé le problème et n'ai trouvé que des correctifs incomplets et c'est compliqué. Probablement un cas pour le traqueur de bogues une fois que cela est corrigé, aussi. J'ai ce problème pour tous les paquets Python.

51
wishi

C'est en fait un problème avec urllib3, pas avec pyopenssl. Debian compile dernièrement OpenSSL sans le support de SSLv3 }, et urllib3 suppose simplement que le support était là.

Le problème était corrigé dans la validation b9b3b0102 } qui fait partie de la version 1.10 de urllib3.

Comme vous utilisez urllib3 dans le cadre de requests, qui est à son tour utilisé par pip, il devrait suffire de mettre à jour une version récente de requests. Au moment de l'écriture, la version actuelle est la 2.6.0 qui contient le correctif:

# pip install requests==2.6.0

Il est possible que vous rencontriez un problème lors de la mise à niveau requests, à cause du problème poulet-œuf. Pour résoudre ce problème, vous pouvez essayer de supprimer temporairement le package pyopenssl, de mettre à niveau requests et de réinstaller pyopenssl.

De plus, vous pouvez utiliser la ligne suivante pour mettre à jour pip avant d'essayer de mettre à jour requests:

# Sudo easy_install --upgrade pip
74
sk1p

Une autre façon de résoudre le problème est d'utiliser 

Sudo easy_install --upgrade pip

et utilisez pip normalement ensuite 

47
user3005724

J'ai reçu la même erreur.
En conjonction avec les réponses précédentes:

Sudo easy_install --upgrade pip

J'ai aussi dû courir:

Sudo pip uninstall pyopenssl
Sudo pip install mozdownload

Cela corrige mon erreur, peut-être que cela peut aider les autres. Je suis venu ici en googlant:

AttributeError: l'objet 'module' n'a pas d'attribut 'PROTOCOL_SSLv3'

13
Alex Tartan

J'ai rencontré ce problème aujourd'hui avec Ansible. Je l'ai résolu avec: pip uninstall pyopenssl

peut-être que cela aidera quelqu'un d'autre dans la même situation

6
bordeltabernacle

J'ai reçu cette erreur après une mise à niveau d'Ubuntu 14 à 16. La mise à niveau a modifié certains chemins Python, ce qui a cassé certains packages principaux. Cette réponse essentiellement résolu pour moi.

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

Je rencontre les mêmes problèmes et je viens de désinstaller la version de requests et d’installer la version exacte à l’aide de la commande suivante.

pip install requests==2.6.0 

alors ça marche

0
cc.zhang

J'ai rencontré ce problème sur un nouveau Xenial et j'ai échoué avec beaucoup de réponses que j'avais vues (certaines que je n'ai pas vraiment essayées car la plupart de mes logiciels étaient plus récents). Ce qui a finalement été résolu pour moi, c’était: les demandes d’installation de pipo Sudo --upgrade ..., ce qui n’est qu’un détail par rapport à l’autre recommandation de mise à niveau des demandes.

0
Michael Casile