<p>request.exceptions.SSLError: EOF ocurrió en violación del protocolo (_ssl.c: 645)</p>

Creado en 12 feb. 2016  ·  77Comentarios  ·  Fuente: psf/requests

Aquí está el primer problema.
https://github.com/kennethreitz/requests/issues/2906

Python 3.5.1 (https://www.python.org/downloads/) Virtualenv 14.0.5 Mac OS X 10.11.3

Primero, creé un virtualenv y pip install requests[security]

Entonces tengo

>>> from cryptography.hazmat.backends.openssl.backend import backend
>>> print(backend.openssl_version_text())
OpenSSL 1.0.2f  28 Jan 2016

que era lo que esperaba.

Todo funcionó muy bien durante aproximadamente una hora.

Luego, algunos de mis propios scripts fallaron, lo cual era normal. Después de eso, cuando intento ejecutar mi script nuevamente, obtuve las siguientes excepciones

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Entonces abrí otra consola de Python y

>>> requests.get("https://www.google.com")
<Response [200]>
>>> requests.get("https://www.telegram.org")
Traceback (most recent call last):
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen
    body=body, headers=headers)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
    self._validate_conn(conn)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 784, in _validate_conn
    conn.connect()
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 252, in connect
    ssl_version=resolved_ssl_version)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 305, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 376, in send
    timeout=timeout
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 588, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 67, in get
    return request('get', url, params=params, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "VirtualenvPath/lib/python3.5/site-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
>>> 

Así que reinicié, desinstalé todas estas bibliotecas y pip las instalé nuevamente. Todo funcionó de nuevo.

Pero después de 1 hora más o menos, la misma excepción nuevamente.

Comentario más útil

@ the-efi ¿Tiene pyopenssl , pyasn1 y ndg-httpsclient instalados?

Todos 77 comentarios

Luego, algunos de mis propios scripts fallaron, lo cual era normal.

¿Cómo se ve un choque como ese?

Después de eso, cuando intento ejecutar mi script nuevamente, obtuve las siguientes excepciones

¿Eres completamente incapaz de ejecutarlos después de eso?

@ sigmavirus24 Es solo un error en mi propio código sin nada que ver con la red.
No estoy seguro de si esta es la causa real o solo una coincidencia.

Pero una cosa es segura, después de algún momento, no puedo hacer una solicitud a https://www.telegram.org , lo que puedo hacer justo después de la solicitud de instalación.

Solo para su información: # 2906

Entonces, me gustaría señalar que está instalando requests[security] que significa que deberíamos usar pyOpenSSL, pero su stacktrace muestra que no lo estamos. Eso es intrigante.

@ sigmavirus24 Entonces, ¿hay algo que pueda hacer para ayudarlo?

¿Alguna idea? @Lukasa

Entonces, lo que más importa aquí es: ¿por qué su código deja de usar PyOpenSSL? Cuando encuentre su falla, ¿puede abrir una consola de Python en su entorno virtual y luego ejecutar import urllib3.contrib.pyopenssl , para ver si funciona?

No se pudo reproducir ahora. Cerraré esto primero y, si vuelvo a encontrar el problema, pegaré el resultado y lo volveré a abrir.

@Lukasa Creo que dado que las solicitudes se envían con su propio urllib3, no podría importar urllib3 solo. Y el siguiente resultado lo confirma.

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3.contrib.pyopenssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'urllib3'
>>> ^D




pip list
cffi (1.5.0)
cryptography (1.2.2)
idna (2.0)
ndg-httpsclient (0.4.0)
pip (8.0.2)
pyasn1 (0.1.9)
pycparser (2.14)
pyOpenSSL (0.15.1)
requests (2.9.1)
setuptools (20.0)
six (1.10.0)
wheel (0.26.0)

Lo siento, intente importar requests.packages.urllib3.contrib.pyopenssl

@Lukasa

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests.packages.urllib3.contrib.pyopenssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "VirtualenvPath/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 57, in <module>
    from socket import _fileobject, timeout, error as SocketError
ImportError: cannot import name '_fileobject'
>>> 

Apuesto a que es un error en 3.5 con pyOpenSSL que no sabíamos sobre @lukasa (con respecto a _fileobject no existente.

No, lo sé y he propuesto una solución en sentido ascendente en urllib3 cuando comenzamos a probar PyOpenSSL. La realidad es que requests[security] no funciona (y nunca ha funcionado) en Python 3. Eso se solucionará en una próxima versión de Requests.

Entonces eso no resuelve nuestro acertijo: ¿por qué funcionó esto un poco y luego se detuvo?

comentario tangente basado en el informe original, el ssl.py integrado en python tiene una opción para suprimir los EOF irregulares, ya que hay muchos sitios que cerrarán las conexiones SSL de forma no limpia. a veces de forma poco fiable, como si fuera una cuestión de tiempo o coincidencia. el siguiente es un extracto de ssl.py

class SSLSocket(socket):
    [...]
    def read(self, len=0, buffer=None):
        """Read up to LEN bytes and return them.
        Return zero-length string on EOF."""

        self._checkClosed()
        if not self._sslobj:
            raise ValueError("Read on closed or unwrapped SSL socket.")
        try:
            return self._sslobj.read(len, buffer)
        except SSLError as x:
            if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs:
                if buffer is not None:
                    return 0
                else:
                    return b''
            else:
                raise

Tener la misma excepción en Python 2.7.11 / OSX al golpear un servidor con requests debajo de gevent . ¿Podría esto estar relacionado?

@ the-efi, ¿podría ser más específico sobre qué excepción está viendo?

    r = requests.post(self.MY_URL, data=parameters)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 109, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/Users/me/Envs/my_env/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
SSLError: EOF occurred in violation of protocol (_ssl.c:590)

@ the-efi ¿Tiene pyopenssl , pyasn1 y ndg-httpsclient instalados?

pyopenssl: negativo
pyasn1: pyasn1 == 0.1.8 (transitorio, supongo)
ndg-httpsclient: negativo

Está bien. También está ejecutando Python 2.7, por lo que usted y el autor parecen tener problemas diferentes.

¿Sabe si encuentra su problema durante la configuración de la conexión o en una conexión de larga duración?

Me imagino que esto es durante la configuración de la conexión, pero si requests reutiliza conexiones abiertas previamente con Connection: keep-alive , podría estar equivocado.

De hecho, las solicitudes reutilizan las conexiones abiertas previamente siempre que sea posible, razón por la cual hice la pregunta. ;)

Sería muy útil si pudiéramos obtener una captura de paquetes de este problema en su caso, aunque eso puede ser complicado dado que ocurre bajo una carga pesada.

No hay problema, veré qué puedo hacer después del fin de semana. ¿Le gustaría que lo envíe como un número nuevo?

Sí, por favor. =)

@Lukasa ¿ Algún progreso con urllib3?

@caizixian Estamos llegando, pero tenemos algunos problemas con nuestras pruebas de CI porque Travis CI tiene una imagen de PyPy bastante antigua que no se comporta bien con PyOpenSSL en este momento. Veré si puedo hacer que esto funcione en algún momento de este fin de semana.

@Lukasa @shazow urllib3 siempre tiene un hogar en http://ci.kennethreitz.org , ¡si lo desea!

¿Alguna actualización sobre este? Sucede bastante cuando se trabaja con aws.

@mindw Por lo que sé, no sabemos exactamente dónde y cuándo está sucediendo. En el seguimiento anterior, está sucediendo durante el apretón de manos, que generalmente es un problema con la negociación: ¿cuándo se encuentra con este error?

OS X, Python 3.5.1, solicita 2.10.0 + seguridad.
Intentaré proporcionar cualquier solicitud de información adicional :)

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 578, in urlopen
    chunked=chunked)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 351, in _make_request
    self._validate_conn(conn)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 814, in _validate_conn
    conn.connect()
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 289, in connect
    ssl_version=resolved_ssl_version)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 308, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 403, in send
    timeout=timeout
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 604, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/gabdav01/.virtualenvs/splatt/bin/splatt", line 9, in <module>
    load_entry_point('splatt', 'console_scripts', 'splatt')()
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/gabdav01/work/paas/splatt/splatt/cmd.py", line 108, in create
    url, json=json, headers=headers)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 518, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/Users/gabdav01/.virtualenvs/splatt/lib/python3.5/site-packages/requests/adapters.py", line 477, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Esto sugiere fuertemente una falta de SNI o ninguna superposición de cifrado. ¿Puede imprimir la línea de comando de criptografía en el OP y decirme qué dice?

¿Como podría hacerlo?

@mindw Mira OP (la publicación original) donde @caizixian importa el backend de cryptography e imprime la versión OpenSSL.

También tengo este problema. ¿Qué información puedo proporcionar para ayudar a resolverlo?

@LukeNZ Muchas cosas. Versión de Python, paquetes instalados, versión de solicitudes, versión de OpenSSL, sistema operativo y el sitio web con el que intenta comunicarse.

Hola, acabo de comenzar a usar Solicitudes y también estoy obteniendo lo mismo. Estoy en OS X 10.11.5, Python 3.5.1 en un entorno virtual, la versión más reciente de las solicitudes. Ejecutar la versión open_ssl como en el OP me da

OpenSSL 1.0.2h 3 de mayo de 2016

Estoy intentando conectarme a https://api.marketcircle.net/v1/ .

Parece que Requests es el único juego en la ciudad sin escribir un montón de código: Unirest ya no se instala para Python 3, así que espero que esto se resuelva pronto ...

@eoco Ok, eso es interesante. No puedo reproducir esto en OS X 10.11.6 Beta, Python 3.5.1 con Requests 2.10.0. ¿Encuentra el problema de manera constante o intermitente?

Constantemente: todavía no he podido conectarme correctamente.

Mis trazas están bastante cerca de las de Mindw anteriores, se publicarán en la parte inferior aquí. Pero al igual que para su información, instalé solicitudes para Python 2.7 para probar eso también y obtuve un SNIMissingWarning: aunque la misma advertencia decía que puede tener que ver con que es una versión anterior de Python, pero no estoy seguro de si esa es la caso. Independientemente, tampoco hubo suerte de conexión.

SNIMissingWarning /Library/Python/2.7/site-packages/requests-2.10.0-py2.7.egg/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

También volví e instalé Unirest en Python 2.7 y obtuve otro error EOF, pero esta vez en urllib2:

urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>

Entonces, esto realmente puede no tener nada que ver con Requests.py en absoluto, pero para ser honesto, no sé a dónde ir desde aquí, aparte de no usar Python. Aquí está el seguimiento de las solicitudes / Python 3.5.1:
'
solicitudes de importación
url = ' https://api.marketcircle.net/v1/ '
r = request.get (url) # sin agregar ningún encabezado de autorización, solo verificando la conexión

Rastreo (llamadas recientes más última):
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", línea 578, en urlopen
chunked = chunked)
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", línea 351, en _make_request
self._validate_conn (conexión)
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", línea 814, en _validate_conn
conexión de conexión ()
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", línea 289, en conexión
ssl_version = resuelto_ssl_version)
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", línea 308, en ssl_wrap_socket
return context.wrap_socket (sock, server_hostname = server_hostname)
Archivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", línea 376, en wrap_socket
_context = self)
Archivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", línea 747, en __init__
self.do_handshake ()
Archivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", línea 983, en do_handshake
self._sslobj.do_handshake ()
Archivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", línea 628, en do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: EOF se produjo en violación del protocolo (_ssl.c: 645)

Durante el manejo de la excepción anterior, se produjo otra excepción:

Rastreo (llamadas recientes más última):
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", línea 403, en envío
timeout = tiempo de espera
Archivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", línea 604, en urlopen
subir SSLError (e)
request.packages.urllib3.exceptions.SSLError: EOF ocurrió en violación del protocolo (_ssl.c: 645)
'
Entonces, mis disculpas si esto no es de ayuda. ¡Gracias!

¿Puedes ejecutar esto y mostrarme el resultado? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Entonces este es el resultado: (Versión diferente al comando que se ejecuta en OP)

OpenSSL 0.9.8zh 14 de enero de 2016

¡Gracias!

@eoco Ok, genial.

Entonces, el problema aquí es que su Python 3 está vinculado con el sistema OpenSSL, que es antiguo. ¿Qué hay en su entorno de pip? ¿Puedes ejecutar python3 -m pip freeze por mí?

No hay mucho ahí ..

Mozaica-iMac: ~ eoc $ python3 -m pip freeze

py3minepi==0.0.1
requests==2.10.0
You are using pip version 8.1.1, however version 8.1.2 is available.

Gracias por ir más allá en esto. Obviamente, no es un problema con las solicitudes, por lo que realmente agradezco su tiempo.

Ok, entonces la forma más fácil de arreglar esto es ejecutar python3 -m pip install pyopenssl pyasn1 ndg-httpsclient . Eso debería solucionar su problema, pero si no es así, podemos buscar opciones más agresivas.

Mmm. Sigue siendo el mismo error después-

Python3.5 -m pip freeze

cffi==1.6.0
cryptography==1.4
idna==2.1
ndg-httpsclient==0.4.1
py3minepi==0.0.1
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==16.0.0
requests==2.10.0
six==1.10.0

@eoco Hrm. ¿Puedes ejecutar esto por mí? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" y dime qué produce eso? También ejecute python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

Vaya, eso ciertamente apunta al problema. Al ejecutar por primera vez, obtuve el siguiente rastreo:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 63, in <module>
    from urllib3.packages.backports.makefile import backport_makefile
ImportError: No module named 'urllib3'

¿No es urllib parte de la biblioteca estándar? En cualquier caso, pip instalé urllib y ahora estoy en funcionamiento.

No puedo decirle cuánto aprecio su ayuda con esto, fue mucho más allá. Me pregunto si hay algún problema con la descarga de Python 3.5 para Mac en python.org. Esta fue una instalación bastante limpia para este proyecto. En cualquier caso, tal vez esto ayude a alguien más si se encuentra con algo como esto.

¡Una vez más, muchas gracias!

Ah, esto parece un error de solicitudes adecuado. Urllib3 tiene una importación no relativa en su código base que se rompe cuando lo comercializamos. Deberíamos apuntar a arreglar eso.

@eoco Entonces, mientras estamos ejecutando esta solución a través de la tubería (ver shazow / urllib3 # 901), la solución más fácil será instalar Python 3 usando algo como Homebrew. Esto vinculará su Python 3 con un OpenSSL mucho más nuevo, que resolverá este problema tanto en las solicitudes como en cualquier otra aplicación que utilice los enlaces TLS del sistema.

Entiendo. El simple hecho de instalar urllib3 parece haber resuelto mi problema, pero puedo hacerlo. Disculpas por las confusiones que esto pueda haber causado.

¡Gracias!

Me encontré con el mismo error DESPUÉS de cambiar a AWS y poner la aplicación detrás de un equilibrador de carga elástico, nunca antes había ocurrido.

También tengo instalado urllib3.

¿Existe alguna posibilidad de instalar pyopenssl? Lo intenté y hubo muchos errores de nivel C (que pueden ser la causa de que falten algunas partes en la imagen de mi ventana acoplable).

[2016-06-29 02:27:59,932: CRITICAL/MainProcess] Task ventures.tasks.cache_warmup[ae2c97eb-3b28-4896-8d0f-42f712115707] INTERNAL ERROR: SSLError(SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:645)'),),)
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 253, in trace_task
    I, R, state, retval = on_error(task_request, exc, uuid)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 201, in on_error
    R = I.handle_error_state(task, eager=eager)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 85, in handle_error_state
    }[self.state](task, store_errors=store_errors)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 125, in handle_failure
    einfo=einfo)
  File "/usr/local/lib/python3.5/dist-packages/celery/utils/dispatch/signal.py", line 166, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/srv/core/celery.py", line 31, in notify_task_failure
    """.format(sender, exception, args, kwargs))
  File "/usr/lib/python3.5/logging/__init__.py", line 1308, in error
    self._log(ERROR, msg, args, **kwargs)
  File "/usr/lib/python3.5/logging/__init__.py", line 1415, in _log
    self.handle(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 1425, in handle
    self.callHandlers(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 1487, in callHandlers
    hdlr.handle(record)
  File "/usr/lib/python3.5/logging/__init__.py", line 855, in handle
    self.emit(record)
  File "/srv/core/management/logger/slack.py", line 28, in emit
    notify_slack(message, channel)
  File "/usr/local/lib/python3.5/dist-packages/celery/local.py", line 188, in __call__
    return self._get_current_object()(*a, **kw)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 439, in __protected_call__
    return orig(self, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py", line 420, in __call__
    return self.run(*args, **kwargs)
  File "/srv/core/tasks.py", line 66, in notify_slack
    data=json.dumps(payload), headers={'Content-Type': 'application/json'}
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 107, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
pip freeze:

amqp==1.4.9
analytics-python==1.1.0
anyjson==0.3.3
beautifulsoup4==4.4.1
billiard==3.3.0.23
bleach==1.4.2
boto==2.39.0
celery==3.1.23
Django==1.8.13
django-appconf==1.0.2
django-compressor==2.0
django-countries==3.4.1
django-filter==0.13.0
django-haystack==2.5.dev0
django-htmlmin==0.9.0
django-modelcluster==1.1
django-overextends==0.4.1
django-redis==4.3.0
django-rest-swagger==0.3.5
django-storages-redux==1.3.2
django-taggit==0.18.3
django-treebeard==4.0.1
djangorestframework==3.3.3
docopt==0.4.0
docutils==0.12
drf-extensions==0.2.8
dropbox==4.0
elasticsearch==1.8.0
et-xmlfile==1.0.1
geopy==1.11.0
google-api-python-client==1.5.0
gunicorn==19.4.5
hiredis==0.2.0
html5lib==0.9999999
httplib2==0.9.2
jdcal==1.2
jsonfield==1.0.3
kombu==3.0.35
mandrill==1.0.57
Markdown==2.6.5
mock==1.0.1
numpy==1.11.0
oauth2client==2.2.0
openpyxl==2.3.4
Pillow==3.1.1
psycopg2==2.6.1
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycurl==7.43.0
pygobject==3.20.0
PyMySQL==0.7.2
python-apt==1.1.0b1
python-dateutil==2.5.3
pytz==2016.4
PyYAML==3.11
rcssmin==1.0.6
redis==2.10.5
requests==2.9.1
rjsmin==1.0.12
rsa==3.4.2
simplejson==3.8.2
six==1.10.0
sphinx-me==0.3
unattended-upgrades==0.1
Unidecode==0.4.19
uritemplate==0.6
urllib3==1.16
wagtail==1.4.5
Willow==0.3.1
python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 49, in <module>
    from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
ImportError: No module named 'ndg'

@shredding Intente instalar pyopenssl, ndg-httpsclient y pyasn1. Necesita los tres en este momento.

De acuerdo, lo intentaré (solo puedo reproducir eso en AWS e informar).

Para aquellos que ejecutan python3 dentro de un paquete ubuntu:latest en la ventana acoplable, deben agregar

RUN apt-get install build-essentials python-dev libffi

antes de agregar

pyOpenSSL==16.0.0
ndg-httpsclient==0.4.1
pyasn1==0.1.9

... según sus requisitos.txt

Tengo el mismo problema aquí.
Se corrigió instalando pyopenssl, ndg-httpsclient, pyasn1 y urllib3 por supuesto.

No volvería a ocurrir de mi lado también.

Estaba tratando de conectarme a la API de Twitter, así que al principio recibí el siguiente error
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Usé el parche de mono y el pyOpenSSL, ndg-httpsclient, pyasn1 y de alguna manera funcionó.
Pero después de esto tengo esto
Traceback (most recent call last): File "twitter_friend.py", line 32, in <module> stream.statuses.filter(follow='sajjkum') File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter self.streamer._request(url, 'POST', params=params) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request response = _send(retry_counter) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send response = func(url, **requests_args) File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post return self.request('POST', url, data=data, json=json, **kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:\Python27\lib\site-packages\requests\adapters.py", line 426, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))

y esto
Traceback (most recent call last): File "twitter_friend.py", line 32, in <module> stream.statuses.filter(follow='sajjkum') File "C:\Python27\lib\site-packages\twython\streaming\types.py", line 66, in filter self.streamer._request(url, 'POST', params=params) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 139, in _request response = _send(retry_counter) File "C:\Python27\lib\site-packages\twython\streaming\api.py", line 123, in _send response = func(url, **requests_args) File "C:\Python27\lib\site-packages\requests\sessions.py", line 511, in post return self.request('POST', url, data=data, json=json, **kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request resp = self.send(prep, **send_kwargs) File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send r = adapter.send(request, **kwargs) File "C:\Python27\lib\site-packages\requests\adapters.py", line 447, in send raise SSLError(e, request=request) requests.exceptions.SSLError: bad handshake: SysCallError(-1, 'Unexpected EOF')

Estoy usando python 2.7, urllib3 (1.4), solicitudes (2.9.1).

Ambos errores sugieren que el servidor remoto no acepta su solicitud. Sin embargo, no es realmente posible para nosotros diagnosticar ese error. Le recomiendo que actualice su OpenSSL y vuelva a intentarlo.

pip install --force-reinstall requests[security] resolvió por mí.

Obtengo la misma excepción después de probar todas las soluciones mencionadas anteriormente. Seguimiento de error:
Archivo "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", línea 488, en solicitud
resp = self.send (preparación, * send_kwargs)Archivo "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", línea 609, en enviarr = adapter.send (solicitud, * kwargs)
Archivo "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", línea 497, en enviar
elevar SSLError (e, solicitud = solicitud)
request.exceptions.SSLError: ("apretón de manos incorrecto: SysCallError (-1, 'EOF inesperado')",)

Información del paquete del sistema:
cffi == 1.9.1
criptografía == 1.6
idna == 2.1
ndg-httpsclient == 0.4.2
pkg-resources == 0.0.0
pyasn1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
solicitudes == 2.12.3
seis == 1.10.0

Python: Python 3.5.2 (predeterminado, 5 de julio de 2016, 12:43:10)
SO: Ubuntu 16.04
OpenSSL 1.0.2g 1 de marzo de 2016

Agradezco su ayuda en este asunto.

Es casi seguro que esto significa que los cifrados que se ofrecen al par remoto no son aceptables. Si usa openssl s_client -connect <host>:<port> para el sitio web con el que intenta contactar, ¿puede decirme cuál es el resultado? (Asegúrese de hacerlo con el OpenSSL 1.0.2g que está usando).

@Lukasa Gracias por su rápida respuesta. El resultado que solicitó es el siguiente:

También estoy agregando la respuesta de OpenSSL 1.0.1f 6 de enero de 2014
Parece estar funcionando en esta versión.

@> openssl version
OpenSSL 1.0.2g  1 Mar 2016
@> openssl s_client -connect <host>:<port>
CONNECTED(00000003)
140401805448856:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
no peer certificate available
No client certificate CA names sent
SSL handshake has read 0 bytes and written 305 bytes
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480703355
    Timeout   : 300 (sec)

También probé con una versión anterior de openssl y parece estar funcionando:

@> openssl version
OpenSSL 1.0.1f 6 Jan 2014
@> openssl s_client -connect <server>:<host>
CONNECTED(00000003)
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=27:certificate not trusted
verify return:1
depth=0 C = US, ST = California, O = Internet Widgits Pty Ltd
verify error:num=21:unable to verify the first certificate
verify return:1
Certificate chain
 0 s:/C=US/ST=California/O=Internet Widgits Pty Ltd
   i:/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=John Smith
Server certificate
BEGIN CERTIFICATE
<certificate>
END CERTIFICATE
subject=/C=US/ST=California/O=Internet Widgits Pty Ltd
issuer=/C=US/ST=California/O=Internet Widgits Pty Ltd/CN=<Name>

No client certificate CA names sent
SSL handshake has read 2120 bytes and written 477 bytes

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 4096 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-SHA384
    Session-ID: C7AEA448B9E21C30D90D1377904426A9D1A21971785D547378CA07ACDAC00161
    Session-ID-ctx: 
    Master-Key: C5B31E9D7A59EF4E6A2657E9F55A64B89F4AE3BBDFD864ADD1087449AA927D9C1655A76E44C3E30FF2301DB00C1CB2F7
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1480703425
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)

Entonces, parece que su servidor tiene una objeción bastante enérgica a algo en su apretón de manos de OpenSSL 1.0.2. ¿Está familiarizado con tcpdump o wirehark? Si es así, sería muy útil si pudiera tomar una captura de paquete de los dos apretones de manos y ponerlos a mi disposición.

El mismo problema aquí con www.celestrak.com

pip freeze --local

[...] Omitting other packages
cffi==1.9.1
cryptography==1.7.1
idna==2.2
ipaddress==1.0.17
ndg-httpsclient==0.4.2
numpy==1.11.3
pyasn1==0.1.9
pyOpenSSL==16.2.0
requests==2.12.4
scandir==1.4

openssl s_client -connect www.celestrak.com:443

CONNECTED(00000003)
140736264172552:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 308 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1483987800
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

openssl version

OpenSSL 1.0.2j  26 Sep 2016

Estoy usando la solución (que funcionaba antes) sugerida aquí .

class CustomAdapter(requests.adapters.HTTPAdapter):
    ''' See: http://stackoverflow.com/a/14146031/1334711 '''
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = requests.packages.urllib3.poolmanager.PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_version=ssl.PROTOCOL_TLSv1)

# Other code

        if url_parse.scheme in ('http', 'https'):
            # It's a URL, get from Internet
            try:
                tle_file = requests.get(source).text

            except requests.exceptions.SSLError:
                pytest.set_trace()
                s = requests.Session()
                s.mount('https://', CustomAdapter())
                tle_file = s.get(source).text

Python v.2.7.13
SO: macOS 10.12.2

El error que recibo es:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

@rubendibattista www.celestrack.com tiene una configuración TLS terrible , como puede ver aquí . Esto significa que las versiones modernas de Requests no admiten ninguno de los conjuntos de cifrado que admite el servidor, porque todos son débiles y están dañados.

En primera instancia, recomiendo no contactar con este servidor en absoluto. Si eso no es posible, puede modificar los conjuntos de cifrado predeterminados haciendo algo como esto .

@Lukasa Gracias por tu apoyo. Me comuniqué con el administrador del sitio para informar lo que dices y tratar de encontrar una solución mejor que la que sugieres.

¡Hola tios! También tengo estos errores. Usar python3 e instalar el combo (pyopenssl ndg-httpsclient pyasn1 urllib3) funcionó. Pero tengo curiosidad por saber cómo se comportó python2.7 en OS X y Ubuntu:

Escenario 001

  • pitón: 2.7
  • solicitudes: 2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3: no instalado
  • virtualenv: 1.11.6
  • SO: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 de enero de 2016

Error

Traceback (most recent call last):
  File "loanpro_doc_uploader.py", line 113, in <module>
    run()
  File "loanpro_doc_uploader.py", line 109, in run
    loanpro = LoanPro(args.env, args.folder)
  File "loanpro_doc_uploader.py", line 36, in __init__
    self.get_all_customforms_data()
  File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
    resp = requests.get(url, headers=headers)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 456, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/sessions.py", line 559, in send
    r = adapter.send(request, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env/lib/python2.7/site-packages/requests/adapters.py", line 382, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)

Escenario 002

  • pitón: 3.4
  • solicitudes: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: no instalado
  • virtualenv: 1.11.6
  • SO: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 de enero de 2016

Error

Traceback (most recent call last):
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
    self._validate_conn(conn)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
    conn.connect()
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connection.py", line 323, in connect
    ssl_context=context)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 365, in wrap_socket
    _context=self)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 583, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/ssl.py", line 810, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 624, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "loanpro_doc_uploader.py", line 113, in <module>
    run()
  File "loanpro_doc_uploader.py", line 109, in run
    loanpro = LoanPro(args.env, args.folder)
  File "loanpro_doc_uploader.py", line 36, in __init__
    self.get_all_customforms_data()
  File "loanpro_doc_uploader.py", line 69, in get_all_customforms_data
    resp = requests.get(url, headers=headers)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/Users/vyscond/Projects/razorvision/loan-documents/env3/lib/python3.4/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:600)

Escenario 004

  • pitón: 2.7
  • solicitudes: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: no instalado
  • SO: Ubuntu 14.4 (Dockerizado)
  • OpenSSL: no instalado

El error se ha ido

Escenario 003

  • pitón: 3.4
  • solicitudes: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: instalado
  • virtualenv: 1.11.6
  • SO: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 de enero de 2016

El error se ha ido

El error no está claro, pero lo más probable es que sea el resultado de su versión de OpenSSL. Su afirmación de que Ubuntu 14.04 no tiene OpenSSL simplemente no puede ser cierta si realiza solicitudes HTTPS. Mi mejor suposición es que el servidor está enviando EOF porque ninguno de sus cifrados es aceptable. Ubuntu funciona porque tiene un OpenSSL más nuevo con cifrados más nuevos. La instalación de PyOpenSSL funciona porque proporciona una copia vendored de OpenSSL 1.0.2, también con cifrados más nuevos.

¡Hola!

Tengo un problema con algunos sitios https y la biblioteca de solicitudes.
Sitio: https://ndmc.gov.in/vacancy.aspx

instalado:
appdirs == 1.4.0
cffi == 1.9.1
criptografía == 1.7.2
idna == 2.2
ndg-httpsclient == 0.4.2
embalaje == 16.8
pyasn1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
pyparsing == 2.1.10
solicitudes == 2.13.0
seis == 1.10.0
urllib3 == 1.20
OpenSSL 1.0.2k 26 de enero de 2017

obtiene un error: request.exceptions.SSLError: ("apretón de manos incorrecto: SysCallError (-1, 'EOF inesperado')",)

SO: Archbang linux, más reciente
Python 3.6 y Python 2.7 - mismo error

Eres otra persona que está ganando nuestra competencia de quién puede intentar contactar al peor servidor HTTPS del mundo . Este servidor está terriblemente configurado, es completamente inseguro. La razón por la que se encuentra con este problema es porque Requests ya no admite ninguno de los conjuntos de cifrado que admite este servidor porque son débiles o inseguros. En primera instancia, le recomiendo que intente presionar a alguien para que arregle el servidor, pero si realmente debe comunicarse con él, puede volver a agregar 3DES de esta manera .

@vyscond me salvó la vida. No importa lo que hice en mi OSX, desapareció solo al instalar pyopenssl ndg-httpsclient pyasn1 urllib3 . ¿Quizás debería agregarse como dependencias para la instalación de OSX de requests ?

Solo es útil en algunas configuraciones de OS X y Python. El resultado final es que siguen siendo opcionales.

Me pregunto cuánto tiempo pasa la gente antes de (quizás) encontrar la solución a ese problema. Tuve que atravesar mucho para encontrar este hilo y revisarlo. ¿Vale la pena?

Depende. Se pueden introducir problemas al requerir estas dependencias también, entre otras cosas, que agrega un nuevo OpenSSL a su sistema que se versiona y administra por separado.

@Lukasa, por algunas razones, hice funcionar mi configuración, parece que pyopenssl (instalado a través de solicitudes [seguridad] está estropeando los certificados adjuntos a algunas solicitudes.
Tuve que desinstalar el paquete pyopenssl para forzar las solicitudes para usar OpenSSL en urllib3.
Esto sucede cuando se usa adal (https://github.com/AzureAD/azure-activedirectory-library-for-python) que básicamente no funciona con algunas versiones antiguas de solicitudes (las que admiten los certificados).
Aunque me parece un poco vudú.

Tenía este problema en Mac OSX Sierra v 10.12.0. Intenté todo en este hilo, no funcionó. Finalmente actualicé mi sistema operativo a v10.12.6 y el problema desapareció.

El error también puede manifestarse cuando se utilizan solicitudes de python para realizar una llamada de API a un sitio que está detrás de una VPN, y ese túnel de VPN está inactivo en ese momento.

¡Hola tios!

Soy un poco nuevo en las solicitudes y encontré este error mientras realizaba un POC con solicitudes para ver si puede cumplir con mis requisitos para el cumplimiento de los criterios comunes. Intenté conectar mi POC de solicitudes a esta herramienta , estoy mirando específicamente los casos de prueba para FIA-X509 Ext 1.1, pero esto es lo que obtuve:

Rastreo (llamadas recientes más última):
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", línea 601, en urlopen
chunked = chunked)
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", línea 346, en _make_request
self._validate_conn (conexión)
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", línea 850, en _validate_conn
conexión de conexión ()
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", línea 326, en connect
ssl_context = contexto)
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", línea 329, en ssl_wrap_socket
return context.wrap_socket (sock, server_hostname = server_hostname)
Archivo "/usr/lib/python3.6/ssl.py", línea 407, en wrap_socket
_context = self, _session = sesión)
Archivo "/usr/lib/python3.6/ssl.py", línea 814, en __init__
self.do_handshake ()
Archivo "/usr/lib/python3.6/ssl.py", línea 1068, en do_handshake
self._sslobj.do_handshake ()
Archivo "/usr/lib/python3.6/ssl.py", línea 689, en do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: EOF se produjo en violación del protocolo (_ssl.c: 777)

Durante el manejo de la excepción anterior, se produjo otra excepción:

Rastreo (llamadas recientes más última):
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", línea 440, en enviar
timeout = tiempo de espera
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", línea 639, en urlopen
_stacktrace = sys.exc_info () [2])
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", línea 388, en incrementos
elevar MaxRetryError (_pool, url, error o ResponseError (causa))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool (host = '10 .0.0.221 ', port = 443): Max reintentos excedidos con url: / (causado por SSLError (SSLEOFError (8,' EOF ocurrió en violación del protocolo (_ssl.c: 777 ) '),))

Durante el manejo de la excepción anterior, se produjo otra excepción:

Rastreo (llamadas recientes más última):
Archivo "req.py", línea 91, en
r = session.request ('OBTENER', 'https://10.0.0.221', verificar = Verdadero)
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", línea 508, en solicitud
resp = self.send (preparación, * send_kwargs)Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", línea 618, en envíor = adapter.send (solicitud, * kwargs)
Archivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", línea 506, en envío
elevar SSLError (e, solicitud = solicitud)
request.exceptions.SSLError: HTTPSConnectionPool (host = '10 .0.0.221 ', port = 443): Max reintentos excedidos con url: / (Causado por SSLError (SSLEOFError (8,' EOF ocurrió en violación del protocolo (_ssl.c: 777 ) '),))

este es el código POC que estoy usando:

import ssl
import requests

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_

CIPHERS = (
    'RSA+AES'
)

class TlsAdapter(HTTPAdapter):
    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)

        self.poolmanager = PoolManager(*pool_args,
                                       ssl_context=ctx,
                                       **pool_kwargs)

session = requests.session()

adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
r = session.request('GET', 'https://10.0.0.221', verify=True)
print(r)

donde 10.0.0.221 es el lugar donde he colocado la herramienta para la verificación.

No estoy exactamente seguro de por qué ocurre este error. Intenté revisar este hilo, así como muchas otras preguntas sobre stackoverflow, pero no pude encontrar una solución adecuada.

Debo admitir que tampoco tengo una comprensión clara del protocolo TLS en este momento. Entonces, si alguien pudiera guiarme sobre cuál es el problema aquí, estaría agradecido.

Por favor, avíseme si me perdí algo o si necesito proporcionar algún tipo de información adicional. ¡Gracias!

Al igual que para su información, este error también ocurre cuando SSL no está habilitado en el servidor al que se está conectando.

¿Fue útil esta página
0 / 5 - 0 calificaciones