python 2.7 - Parche pyopenssl para el problema sslv3
install python pyopenssl (7)
Tengo un problema en un sistema Debian 8 con 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''**
Me registré en la biblioteca e intenté parchear /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,
}
¿Podría alguien aclararme cómo puedo solucionar esto? Sería súper increíble si alguien tuviera una pista. Busqué en Google el problema y solo encontré parches incompletos y es desordenado. Probablemente también sea un caso para el rastreador de errores una vez que esto se solucione. Tengo este problema para todos los paquetes de Python.
Esto es realmente un problema con
urllib3
, no con
pyopenssl
.
Debian
últimamente compila OpenSSL sin soporte SSLv3
, y
urllib3
simplemente asumió que el soporte estaba allí.
El problema se
solucionó en commit b9b3b0102,
que es parte de la versión 1.10 de
urllib3
.
Como está utilizando
urllib3
como parte de las
requests
, que a su vez es utilizado por
pip
, debería ser suficiente para actualizar a una versión reciente de las
requests
.
Al momento de escribir, la versión actual es 2.6.0 que contiene la solución:
# pip install requests==2.6.0
Puede encontrar un problema al actualizar las
requests
, debido al problema del huevo de gallina.
Para solucionar esto, puede intentar eliminar temporalmente el paquete
pyopenssl
, actualizar las
requests
y reinstalar
pyopenssl
.
Además, es posible que desee utilizar la siguiente línea para actualizar
pip
antes de intentar actualizar las
requests
:
# sudo easy_install --upgrade pip
Me encontré con este problema hoy con Ansible.
Lo resolví con:
pip uninstall pyopenssl
tal vez esto ayude a alguien más en la misma situación
Me encontré con esto en un nuevo Xenial y no tuve éxito con muchas respuestas que había visto (algunas realmente no lo intenté porque la mayoría de mi software estaba más actualizado). Lo que finalmente lo resolvió para mí fue: solicitudes de instalación de sudo pip: actualización ... que es solo un giro en la otra recomendación de actualización de solicitud.
Me encuentro con los mismos problemas y solo desinstalo la versión de las
requests
e instalo la versión exacta usando el siguiente comando.
pip install requests==2.6.0
entonces funciona
Otra forma de solucionar el problema es usar
sudo easy_install --upgrade pip
y usar pip normalmente después
Recibí el mismo error.
En conjunción con las respuestas anteriores:
sudo easy_install --upgrade pip
También tuve que correr:
sudo pip uninstall pyopenssl
sudo pip install mozdownload
Esto solucionó mi error, tal vez pueda ayudar a otros. Vine aquí buscando en Google:
AttributeError: el objeto ''módulo'' no tiene atributo ''PROTOCOL_SSLv3''
Recibí este error después de una actualización de Ubuntu 14 a 16. La actualización cambió algunas rutas de Python, lo que rompió algunos paquetes principales. Esta respuesta esencialmente lo arregló para mí.
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