<p>request.exceptions.SSLError: EOF ocorreu em violação do protocolo (_ssl.c: 645)</p>

Criado em 12 fev. 2016  ·  77Comentários  ·  Fonte: psf/requests

Aqui está o primeiro 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

Primeiro, criei um virtualenv e pip install requests[security]

Então eu tenho

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

que era o que eu esperava.

Tudo funcionou bem por cerca de uma hora.

Então, alguns dos meus próprios scripts travaram, o que era normal. Depois disso, quando tento executar meu script novamente, recebo as seguintes exceções

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)

Então, abri outro console Python e

>>> 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)
>>> 

Então eu reiniciei, desinstalei todas essas libs e instalei-as novamente. Tudo funcionou novamente.

Mas depois de 1 hora ou mais, a mesma exceção novamente.

Comentários muito úteis

@ the-efi Você tem pyopenssl , pyasn1 e ndg-httpsclient instalados?

Todos 77 comentários

Então, alguns dos meus próprios scripts travaram, o que era normal.

Qual é a aparência de uma falha como essa?

Depois disso, quando tento executar meu script novamente, recebo as seguintes exceções

Você é completamente incapaz de executá-los depois disso?

@ sigmavirus24 É apenas um bug em meu próprio código, sem nada a ver com rede.
Não tenho certeza se esta é a causa real ou apenas coincidência.

Mas uma coisa é certa, depois de certo ponto, não consigo mais fazer a solicitação para https://www.telegram.org , o que posso fazer logo após a solicitação de instalação.

Apenas para sua informação: # 2906

Portanto, gostaria de salientar que você está instalando requests[security] que significa que deveríamos usar o pyOpenSSL, mas o rastreamento de pilha mostra que não. Isso é intrigante.

@ sigmavirus24 Então, há algo que posso fazer para ajudá-lo?

Qualquer ideia? @Lukasa

Então, o que mais importa aqui é: por que seu código para de usar PyOpenSSL? Ao se deparar com o travamento, você pode abrir um console Python em seu ambiente virtual e, em seguida, executar import urllib3.contrib.pyopenssl para ver se funciona?

Não foi possível reproduzir agora. Vou fechar primeiro e, se encontrar o problema novamente, colarei o resultado e o reabrirei.

@Lukasa Acho que, como as solicitações são enviadas com seu próprio urllib3, não consegui importar o urllib3 sozinho. E o seguinte resultado o 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)

Sinto muito, tente 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'
>>> 

Aposto que é um bug no 3.5 com pyOpenSSL que não conhecíamos sobre @lukasa (com relação a _fileobject não existente.

Não, eu sei sobre isso e propus uma correção upstream no urllib3 quando começamos a testar o PyOpenSSL. A realidade é que requests[security] não (e nunca) funcionou no Python 3. Isso será corrigido em uma próxima versão do Requests.

Então isso não resolve nosso quebra-cabeça: por que funcionou um pouco e depois parou?

comentário tangente com base no relatório original, o ssl.py embutido em python tem uma opção para suprimir EOFs irregulares, pois há muitos sites que encerram conexões SSL de maneira impura. às vezes não é confiável, como se fosse uma questão de tempo ou coincidência. o seguinte é um extrato 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

Tendo a mesma exceção no Python 2.7.11 / OSX ao bater em um servidor com requests sob gevent . Isso poderia estar relacionado?

@ the-efi você poderia ser mais específico sobre qual exceção está vendo?

    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 Você tem pyopenssl , pyasn1 e ndg-httpsclient instalados?

pyopenssl: negativo
pyasn1: pyasn1 == 0.1.8 (transiente, eu acho)
ndg-httpsclient: negativo

OK. Você também está executando o Python 2.7, então você e o autor da postagem parecem estar tendo problemas diferentes.

Você sabe se encontrou seu problema durante a configuração da conexão ou em uma conexão de longa duração?

Eu imagino que isso seja durante a configuração da conexão, mas se requests reutilizar conexões abertas anteriormente com Connection: keep-alive posso estar errado.

Requests realmente reutiliza conexões abertas anteriormente sempre que possível, e é por isso que fiz a pergunta. ;)

Seria muito útil se pudéssemos obter uma captura de pacote desse problema no seu caso, embora isso possa ser complicado, visto que ocorre sob carga pesada.

Sem problemas, verei o que posso fazer depois do fim de semana. Você gostaria que eu apresentasse isso como um novo problema?

Sim por favor. =)

@Lukasa Algum progresso com o urllib3?

@caizixian Estamos chegando lá, mas temos alguns problemas com nossos testes de CI porque o Travis CI tem uma imagem PyPy bastante antiga que não se comporta bem com PyOpenSSL no momento. Vou ver se consigo fazer isso funcionar em algum momento neste fim de semana.

@Lukasa @shazow urllib3 sempre tem uma casa em http://ci.kennethreitz.org , se desejar!

Alguma atualização sobre este? Acontece bastante quando se trabalha com aws.

@mindw Tanto quanto eu sei, não temos um bom entendimento de exatamente onde e quando isso está acontecendo. No backtrace acima, isso está acontecendo durante o handshake, o que geralmente é um problema de negociação: quando você encontra esse erro?

OS X, Python 3.5.1, requer 2.10.0 + segurança.
Vou tentar fornecer qualquer informação adicional sobre o pedido :)

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)

Isso sugere fortemente uma falta de SNI ou nenhuma sobreposição de cifra. Você pode imprimir a linha de comando de criptografia no OP e me dizer o que diz?

Como eu faria isso?

@mindw Olhe para OP (o post original) onde @caizixian importa o backend de cryptography e imprime a versão OpenSSL.

Também recebendo esse problema. Que informações posso fornecer para ajudar a resolver?

@LukeNZ Muitas coisas. Versão do Python, pacotes instalados, versão das solicitações, versão do OpenSSL, sistema operacional e o site que você está tentando entrar em contato.

Olá, comecei a usar o Requests e também estou recebendo a mesma coisa. Estou no OS X 10.11.5, Python 3.5.1 em um ambiente virtual, a versão mais recente de solicitações. Executando a versão open_ssl como no OP me dá

OpenSSL 1.0.2h 3 de maio de 2016

Estou tentando me conectar a https://api.marketcircle.net/v1/ .

Parece que Requests é o único jogo na cidade sem escrever um monte de código - o Unirest não é mais instalado para Python 3, então garoto, espero que isso seja descoberto logo.

@eoco Ok, isso é interessante. Não consigo reproduzir isso no OS X 10.11.6 Beta, Python 3.5.1 com Requests 2.10.0. Você encontra o problema de forma consistente ou intermitente?

Consistentemente - ainda não consegui me conectar com sucesso.

Meus rastreamentos estão bem parecidos com os da mente acima, serão postados aqui embaixo. Mas, assim como para sua informação, instalei solicitações para Python 2.7 para testar isso também e recebi um SNIMissingWarning: embora o mesmo aviso dissesse que pode ter a ver com ser uma versão mais antiga do Python, mas não tenho certeza se essa é a caso. Independentemente disso, não houve sorte de conexão lá também.

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.

Também voltei e instalei o Unirest no Python 2.7 e recebo outro erro EOF, mas desta vez no urllib2:

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

Portanto, isso realmente pode não ter nada a ver com Requests.py, mas para ser honesto, não sei para onde ir a partir daqui, a não ser não usar Python. Aqui está o rastreamento de solicitações / Python 3.5.1:
`
pedidos de importação
url = ' https://api.marketcircle.net/v1/ '
r = requests.get (url) # não adicionando nenhum cabeçalho de autorização, apenas verificando a conexão

Traceback (última chamada mais recente):
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", linha 578, em urlopen
chunked = chunked)
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", linha 351, em _make_request
self._validate_conn (conn)
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", linha 814, em _validate_conn
conn.connect ()
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", linha 289, na conexão
ssl_version = resolvido_ssl_version)
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", linha 308, em ssl_wrap_socket
return context.wrap_socket (sock, server_hostname = server_hostname)
Arquivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", linha 376, em wrap_socket
_context = self)
Arquivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", linha 747, em __init__
self.do_handshake ()
Arquivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", linha 983, em do_handshake
self._sslobj.do_handshake ()
Arquivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", linha 628, em do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: EOF ocorreu em violação do protocolo (_ssl.c: 645)

Durante o tratamento da exceção acima, outra exceção ocorreu:

Traceback (última chamada mais recente):
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", linha 403, no envio
tempo limite = tempo limite
Arquivo "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", linha 604, em urlopen
aumentar SSLError (e)
request.packages.urllib3.exceptions.SSLError: EOF ocorreu em violação do protocolo (_ssl.c: 645)
`
Então, minhas desculpas se isso não ajudar. Obrigado!

Você pode executar isso e me mostrar o resultado? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Portanto, este é o resultado: (versão diferente do comando executado no OP)

OpenSSL 0.9.8zh 14 de janeiro de 2016

Obrigado!

@eoco Ok, legal.

Portanto, o problema aqui é que seu Python 3 está vinculado ao sistema OpenSSL, que é antigo. O que está em seu ambiente de pip? Você pode executar python3 -m pip freeze para mim?

Não muito lá ..

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.

Obrigado por ir acima e além disso. Obviamente, não é um problema com os Pedidos, por isso, agradeço muito o seu tempo.

Ok, então a maneira mais fácil de corrigir isso é executar python3 -m pip install pyopenssl pyasn1 ndg-httpsclient . Isso deve resolver o seu problema, mas se não resolver, podemos buscar opções mais agressivas.

Hmm. Continua o mesmo erro depois -

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 . Você pode executar isso para mim? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" e me diga o que isso resulta? Também execute python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

Uau, isso certamente aponta para o problema. Na primeira corrida, obtive o seguinte rastreamento:

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'

O urllib não faz parte da biblioteca padrão? Em qualquer caso, instalei o urllib e agora estou instalado e funcionando.

Eu não posso te dizer o quanto eu agradeço sua ajuda com isso, você foi muito além. Eu me pergunto se há um problema com o download do Python 3.5 para Mac em python.org? Esta foi uma instalação praticamente limpa para este projeto. Em qualquer caso, talvez isso ajude outra pessoa se ela se deparar com algo assim.

Mais uma vez, muito obrigado!

Ah, isso parece um bug de solicitações adequado. Urllib3 tem uma importação não relativa em sua base de código que falha quando o vendorizamos! Devemos tentar consertar isso.

@eoco Então, enquanto estamos executando esta correção por meio do pipeline (consulte shazow / urllib3 # 901), sua correção mais fácil será instalar o Python 3 usando algo como o Homebrew. Isso vinculará seu Python 3 a um OpenSSL muito mais recente, que resolverá esse problema para você em solicitações e em qualquer outro aplicativo que use as ligações TLS do sistema.

Entendi. Apenas instalar o urllib3 parece ter resolvido meu problema, mas posso simplesmente fazer isso. Peço desculpas por quaisquer confusões que isso possa ter causado.

Obrigado!

Eu me deparei com o mesmo bug APÓS mudar para o aws e colocar o aplicativo atrás de um balanceador de carga elástico, nunca ocorrido antes.

Também tenho o urllib3 instalado.

Existe esperança para instalar o pyopenssl? Tentei e ocorreram muitos erros de nível C (que podem ser a causa de algumas partes ausentes em minha imagem do docker).

[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 Tente instalar pyopenssl, ndg-httpsclient e pyasn1. Você precisa de todos os três neste momento.

Ok, vou tentar (só posso reproduzir isso no aws e relatar).

Para aqueles que executam python3 dentro de um pacote ubuntu:latest no docker, você precisa adicionar

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

antes de adicionar

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

... para o seu requirements.txt

Tenho o mesmo problema aqui.
Corrigido instalando pyopenssl, ndg-httpsclient, pyasn1 e urllib3 ofcourse.

Eu não voltei a ocorrer do meu lado também.

Eu estava tentando me conectar à API do Twitter, então a princípio recebi o erro abaixo
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Usei o monkey patch e o letter money patch não funcionou, instalei o pyOpenSSL, ndg-httpsclient, pyasn1 e de alguma forma funcionou.
Mas depois disso eu peguei isso
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("''",))

e isto
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')

Estou usando o python 2.7, urllib3 (1.4), solicitações (2.9.1).

Ambos os erros sugerem que o servidor remoto não está aceitando sua solicitação. No entanto, não é realmente possível para nós diagnosticar esse erro. Eu recomendo que você atualize seu OpenSSL e tente novamente.

pip install --force-reinstall requests[security] resolveu para mim.

Estou recebendo a mesma exceção depois de tentar todas as soluções mencionadas acima. Rastreamento de erro:
Arquivo "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", linha 488, na solicitação
resp = self.send (prep, * send_kwargs)Arquivo "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", linha 609, em envior = adapter.send (request, * kwargs)
Arquivo "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", linha 497, em envio
aumentar SSLError (e, solicitação = solicitação)
request.exceptions.SSLError: ("handshake incorreto: SysCallError (-1, 'EOF inesperado')",)

Informações do pacote do sistema:
cffi == 1.9.1
criptografia == 1,6
idna == 2.1
ndg-httpsclient == 0.4.2
pkg-resources == 0.0.0
pyasn1 == 0.1.9
picparser == 2,17
pyOpenSSL == 16.2.0
pedidos == 2.12.3
seis == 1.10.0

Python: Python 3.5.2 (padrão, 5 de julho de 2016, 12:43:10)
SO: Ubuntu 16.04
OpenSSL 1.0.2g 1 de março de 2016

Agradecemos sua ajuda neste assunto.

Isso quase certamente significa que as cifras oferecidas ao par remoto não são aceitáveis. Se você usar openssl s_client -connect <host>:<port> para o site que está tentando entrar em contato, pode me dizer qual é o resultado? (Certifique-se de fazer isso com o OpenSSL 1.0.2g que você está usando).

@Lukasa Obrigado pela sua resposta rápida. A saída que você pediu é a seguinte:

Além disso, estou adicionando a resposta do OpenSSL 1.0.1f 6 de janeiro de 2014
Parece estar funcionando nesta versão.

@> 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)

Também tentei com uma versão anterior do openssl e 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)

Portanto, parece que seu servidor tem uma objeção bastante árdua a algo em seu handshake do OpenSSL 1.0.2. Você está familiarizado com tcpdump ou wireshark? Se estiver, seria muito útil se você pudesse capturar um pacote dos dois apertos de mão e disponibilizá-los para mim.

O mesmo problema aqui com 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

Estou usando a correção (que estava funcionando antes) sugerida aqui .

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
OS: macOS 10.12.2

O erro que estou recebendo é:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

@rubendibattista www.celestrack.com tem uma configuração de TLS terrível , como você pode ver aqui . Isso significa que as versões modernas de Requests não suportam nenhum dos conjuntos de criptografia que o servidor oferece, porque todos eles são fracos e quebrados.

Em primeira instância, recomendo não entrar em contato com este servidor de forma alguma. Se isso não for possível, você pode corrigir os conjuntos de criptografia padrão fazendo algo assim .

@Lukasa Obrigado pelo seu apoio. Entrei em contato com o administrador do site para relatar o que você disse e tentar encontrar uma solução melhor do que usar a solução alternativa que você sugeriu.

Oi, pessoal! Também tenho esses erros. Usar python3 e instalar o combo (pyopenssl ndg-httpsclient pyasn1 urllib3) resolveu o problema. Mas estou curioso para saber como o python2.7 se comportou no OS X e no Ubuntu:

Cenário 001

  • python: 2.7
  • pedidos: 2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3: não instalado
  • virtualenv: 1.11.6
  • OS: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 de janeiro de 2016

Erro

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)

Cenário 002

  • python: 3.4
  • solicitações: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: não instalado
  • virtualenv: 1.11.6
  • OS: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 de janeiro de 2016

Erro

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)

Cenário 004

  • python: 2.7
  • solicitações: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: não instalado
  • SO: Ubuntu 14.4 (Dockerized)
  • OpenSSL: não instalado

O erro se foi

Cenário 003

  • python: 3.4
  • solicitações: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: instalado
  • virtualenv: 1.11.6
  • OS: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 de janeiro de 2016

O erro se foi

O erro não está claro, mas provavelmente é resultado de sua versão do OpenSSL. Sua afirmação de que o Ubuntu 14.04 não tem OpenSSL simplesmente não pode ser verdadeira se você estiver fazendo solicitações HTTPS. Meu melhor palpite é que o servidor está enviando EOF porque nenhuma de suas cifras é aceitável. O Ubuntu funciona porque tem um OpenSSL mais recente com cifras mais recentes. A instalação do PyOpenSSL funciona porque fornece uma cópia vendida do OpenSSL 1.0.2, também com cifras mais recentes.

Olá!

Eu tenho um problema com alguns sites https e biblioteca de solicitações.
Site: https://ndmc.gov.in/vacancy.aspx

instalado:
appdirs == 1.4.0
cffi == 1.9.1
criptografia == 1.7.2
idna == 2.2
ndg-httpsclient == 0.4.2
embalagem == 16,8
pyasn1 == 0.1.9
picparser == 2,17
pyOpenSSL == 16.2.0
pyparsing == 2.1.10
pedidos == 2.13.0
seis == 1.10.0
urllib3 == 1,20
OpenSSL 1.0.2k 26 de janeiro de 2017

obter um erro: requests.exceptions.SSLError: ("aperto de mão incorreto: SysCallError (-1, 'EOF inesperado')",)

SO: Archbang linux, mais recente
Python 3.6 e Python 2.7 - mesmo erro

Você é outra pessoa que está ganhando nossa competição de quem pode tentar entrar em contato com o pior servidor HTTPS do mundo . Este servidor está terrivelmente configurado, é totalmente inseguro. O motivo pelo qual você está encontrando esse problema é porque os Requests não oferecem mais suporte a nenhum dos conjuntos de criptografia que este servidor oferece, porque são todos fracos ou inseguros. Em primeiro lugar, eu recomendo que você tente pressionar alguém para consertar o servidor, mas se você realmente precisar contatá-lo, você pode adicionar novamente o 3DES como este .

@vyscond salvou minha vida. Não importa o que eu fiz no meu OSX, ele foi embora apenas durante a instalação de pyopenssl ndg-httpsclient pyasn1 urllib3 . Talvez deva ser adicionado como dependências para instalação OSX de requests ?

Só é útil em algumas configurações do OS X e Python. O resultado final é que eles permanecem opcionais.

Estou me perguntando quanto tempo as pessoas gastam antes de (talvez) encontrar a solução para esse problema. Tive de passar por muito tempo para encontrar esse tópico e percorrê-lo. Vale a pena?

Depende. Os problemas podem ser introduzidos exigindo essas dependências também, não menos importante que adiciona um novo OpenSSL ao seu sistema que é versionado e gerenciado separadamente.

@Lukasa, por alguns motivos, fiz minha configuração funcionar, parece que o pyopenssl (instalado por meio de solicitações [segurança] está bagunçando os certificados anexados a algumas solicitações.
Tive que desinstalar o pacote pyopenssl para forçar as solicitações de uso do OpenSSL no urllib3.
Isso acontece ao usar adal (https://github.com/AzureAD/azure-activedirectory-library-for-python) que basicamente não funciona com algumas versões antigas de solicitações (aquelas que suportam os certificados).
Mas parece um pouco vodu para mim.

Eu estava tendo esse problema no Mac OSX Sierra v 10.12.0. Tentei tudo neste tópico, não funcionou. Finalmente atualizei meu sistema operacional para v10.12.6 e o ​​problema foi embora.

O erro também pode se manifestar ao usar solicitações de python para fazer uma chamada de api para um site que está atrás de um vpn, e esse túnel vpn está desativado naquele momento.

Oi, pessoal!

Eu sou um pouco novo em solicitações e encontrei este erro ao fazer um POC com solicitações para ver se ele pode atender aos meus requisitos de conformidade de critérios comuns. Eu tentei conectar meu POC de Solicitações a esta ferramenta , estou olhando especificamente para os casos de teste para FIA-X509 Ext 1.1, mas isto é o que consegui:

Traceback (última chamada mais recente):
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", linha 601, em urlopen
chunked = chunked)
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", linha 346, em _make_request
self._validate_conn (conn)
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", linha 850, em _validate_conn
conn.connect ()
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", linha 326, na conexão
ssl_context = context)
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", linha 329, em ssl_wrap_socket
return context.wrap_socket (sock, server_hostname = server_hostname)
Arquivo "/usr/lib/python3.6/ssl.py", linha 407, em wrap_socket
_context = self, _session = session)
Arquivo "/usr/lib/python3.6/ssl.py", linha 814, em __init__
self.do_handshake ()
Arquivo "/usr/lib/python3.6/ssl.py", linha 1068, em do_handshake
self._sslobj.do_handshake ()
Arquivo "/usr/lib/python3.6/ssl.py", linha 689, em do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: EOF ocorreu em violação do protocolo (_ssl.c: 777)

Durante o tratamento da exceção acima, outra exceção ocorreu:

Traceback (última chamada mais recente):
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", linha 440, no envio
tempo limite = tempo limite
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", linha 639, em urlopen
_stacktrace = sys.exc_info () [2])
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", linha 388, em incremento
aumentar MaxRetryError (_pool, url, erro ou ResponseError (causa))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool (host = '10 .0.0.221 ', port = 443): Máximo de tentativas excedido com url: / (Causado por SSLError (SSLEOFError (8,' EOF ocorreu em violação do protocolo (_ssl.c: 777 ) '),))

Durante o tratamento da exceção acima, outra exceção ocorreu:

Traceback (última chamada mais recente):
Arquivo "req.py", linha 91, em
r = session.request ('GET', 'https://10.0.0.221', verify = True)
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", linha 508, na solicitação
resp = self.send (prep, * send_kwargs)Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", linha 618, no envior = adapter.send (request, * kwargs)
Arquivo "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", linha 506, em envio
aumentar SSLError (e, solicitação = solicitação)
request.exceptions.SSLError: HTTPSConnectionPool (host = '10 .0.0.221 ', port = 443): Máximo de tentativas excedido com url: / (Causado por SSLError (SSLEOFError (8,' EOF ocorreu em violação de protocolo (_ssl.c: 777 ) '),))

este é o código POC que estou 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)

onde 10.0.0.221 é o local onde coloquei a ferramenta para verificação.

Não tenho certeza de por que esse erro está ocorrendo. Tentei passar por este tópico e também por várias outras questões sobre stackoverflow, mas não consegui encontrar uma solução adequada.

Admito que não tenho uma compreensão clara do protocolo TLS também neste momento. Então, se alguém pudesse me orientar sobre qual é o problema aqui, eu ficaria muito grato.

Por favor, deixe-me saber se eu esqueci alguma coisa ou se precisar fornecer qualquer tipo de informação adicional. Obrigado!

Assim como para sua informação, esse erro também ocorre quando o SSL não está habilitado no servidor ao qual você está se conectando.

Esta página foi útil?
0 / 5 - 0 avaliações