<p>request.exceptions.SSLError: EOF произошел с нарушением протокола (_ssl.c: 645)</p>

Созданный на 12 февр. 2016  ·  77Комментарии  ·  Источник: psf/requests

Вот первая проблема.
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

Сначала я создал virtualenv и pip install requests[security]

Тогда я получил

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

чего я и ожидал.

Все отлично работало около часа.

Затем произошел сбой некоторых моих собственных скриптов, что было нормальным явлением. После этого, когда я снова пытаюсь запустить свой скрипт, у меня были следующие исключения

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)

Итак, я открыл другую консоль Python и

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

Итак, я перезагрузился, удалил все эти библиотеки и снова установил их. Все снова заработало.

Но примерно через час или около того, снова то же исключение.

Самый полезный комментарий

@ the-efi Установлены ли у вас pyopenssl , pyasn1 и ndg-httpsclient ?

Все 77 Комментарий

Затем произошел сбой некоторых моих собственных скриптов, что было нормальным явлением.

Как выглядит такая авария?

После этого, когда я снова пытаюсь запустить свой скрипт, у меня были следующие исключения

Вы вообще не можете их запускать после этого?

@ sigmavirus24 Это просто ошибка в моем собственном коде,
Я не уверен, настоящая ли это причина или просто совпадение.

Но одно можно сказать наверняка: через какой-то момент я совершенно не могу отправить запрос на https://www.telegram.org , что я могу сделать сразу после запроса на установку.

Просто к вашему сведению: # 2906

Поэтому я хотел бы указать, что вы устанавливаете requests[security] что означает, что мы должны использовать pyOpenSSL, но ваша трассировка стека показывает, что это не так. Это интригует.

@ sigmavirus24 Я могу вам чем-нибудь помочь?

Любая идея? @Lukasa

Итак, что здесь важнее всего: почему ваш код перестает использовать PyOpenSSL? Когда вы столкнетесь с ошибкой, можете ли вы открыть консоль python в своей виртуальной среде, а затем запустить import urllib3.contrib.pyopenssl , чтобы проверить, работает ли это?

Не могу воспроизвести сейчас. Я сначала закрою это, а если снова столкнусь с проблемой, я вставлю результат и снова открою его.

@Lukasa Я думаю, поскольку запросы поставляются с собственным urllib3, я не мог импортировать только urllib3. И следующий результат это подтверждает.

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)

Извините, попробуйте импортировать 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'
>>> 

Бьюсь об заклад, это ошибка в 3.5 с pyOpenSSL, о которой мы не знали о @lukasa (в отношении _fileobject не существует.

Нет, я знаю об этом и предложил исправление в urllib3, когда мы начали тестировать PyOpenSSL. Реальность такова, что requests[security] не работает (и никогда) не работал с Python 3. Это будет исправлено в следующей версии Requests.

Так что это не решает нашу загадку: почему это немного поработало, а затем прекратилось?

тангенциальный комментарий, основанный на исходном отчете, встроенный ssl.py в python имеет возможность подавлять рваные EOF, поскольку существует множество сайтов, которые нечисто отключают SSL-соединения. иногда ненадежно, как если бы это было вопросом времени или совпадения. Ниже приводится выдержка из 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

Такое же исключение в Python 2.7.11 / OSX при обстреле сервера с помощью requests под gevent . Может ли это быть связано?

@ the-efi не могли бы вы уточнить, какое исключение вы видите?

    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 Установлены ли у вас pyopenssl , pyasn1 и ndg-httpsclient ?

pyopenssl: отрицательный
pyasn1: pyasn1 == 0.1.8 (временный, я думаю)
ndg-httpsclient: отрицательный

Ok. Вы также используете Python 2.7, поэтому у вас и у автора, похоже, разные проблемы.

Знаете ли вы, столкнулись ли вы с проблемой во время настройки подключения или при длительном подключении?

Я бы предположил, что это происходит во время установки соединения, но если requests повторно использует ранее открытые соединения с Connection: keep-alive я могу ошибаться.

Requests действительно повторно использует ранее открытые соединения, где это возможно, поэтому я задал этот вопрос. ;)

Было бы очень полезно, если бы мы могли получить пакетный захват этой проблемы в вашем случае, хотя это может быть сложно, учитывая, что она возникает при большой нагрузке.

Нет проблем, я посмотрю, что я могу с этим поделать после выходных. Вы хотите, чтобы я отправил это как новый выпуск?

Да, пожалуйста. знак равно

@Lukasa Есть ли прогресс с urllib3?

@caizixian Мы

@Lukasa @shazow urllib3 при желании всегда имеет дом на http://ci.kennethreitz.org !

Есть какие-нибудь обновления по этому поводу? При работе с aws такое случается довольно часто.

@mindw Насколько я знаю, у нас нет

OS X, Python 3.5.1, запросы 2.10.0 + безопасность.
Я постараюсь предоставить любую дополнительную информацию по запросу :)

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)

Это настоятельно предполагает отсутствие SNI или перекрытие шифров. Можете ли вы распечатать командную строку криптографии в OP и сказать мне, что в ней написано?

как бы я это сделал?

@mindw Посмотрите на OP (исходный пост), где @caizixian импортирует бэкэнд из cryptography и печатает версию OpenSSL.

Также возникает эта проблема. Какую информацию я могу предоставить для решения проблемы?

@LukeNZ Много чего. Версия Python, установленные пакеты, версия запросов, версия OpenSSL, операционная система и веб-сайт, с которым вы пытаетесь связаться.

Привет, я только начал использовать запросы, и я тоже получаю то же самое. Я использую OS X 10.11.5, Python 3.5.1 в виртуальном окружении, новейшую версию запросов. Запуск версии open_ssl, как в OP, дает мне

OpenSSL 1.0.2h 3 мая 2016 г.

Я пытаюсь подключиться к https://api.marketcircle.net/v1/ .

Похоже, что Requests - единственная игра в городе, в которой не было написано кучу кода - Unirest больше не устанавливается для Python 3, так что мальчик, я надеюсь, что это скоро выяснится ...

@eoco Хорошо, это интересно. Я не могу воспроизвести это на OS X 10.11.6 Beta, Python 3.5.1 с запросами 2.10.0. Вы сталкиваетесь с этой проблемой постоянно или периодически?

Последовательно - я еще не смог успешно подключиться.

Мои трассировки довольно близки к тому, что описано выше, я опубликую здесь внизу. Но так же, как и к вашему сведению, я установил запросы для Python 2.7, чтобы проверить это, и получил SNIMissingWarning: хотя в том же предупреждении говорилось, что это может быть связано с тем, что это более старая версия Python, но я не уверен, что это кейс. Тем не менее, тут тоже не повезло с подключением.

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.

Я также вернулся и установил Unirest в Python 2.7 и получил еще одну ошибку EOF, но на этот раз в urllib2:

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

Итак, это действительно может не иметь ничего общего с Requests.py, но, честно говоря, я не знаю, что делать дальше, кроме как не использовать Python. Вот трассировка запросов / Python 3.5.1:
`
запросы на импорт
url = ' https://api.marketcircle.net/v1/ '
r = requests.get (url) # без добавления заголовков авторизации, просто проверка соединения

Отслеживание (последний вызов последний):
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", строка 578, в urlopen
chunked = фрагментированный)
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", строка 351, в _make_request
self._validate_conn (соединение)
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", строка 814, в _validate_conn
conn.connect ()
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", строка 289, в соединении
ssl_version = resolved_ssl_version)
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", строка 308, в ssl_wrap_socket
вернуть context.wrap_socket (sock, server_hostname = server_hostname)
Файл "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", строка 376, в wrap_socket
_context = self)
Файл "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", строка 747, в __init__
self.do_handshake ()
Файл "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", строка 983, в do_handshake
self._sslobj.do_handshake ()
Файл "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", строка 628, в do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: EOF произошел с нарушением протокола (_ssl.c: 645)

Во время обработки вышеуказанного исключения произошло другое исключение:

Отслеживание (последний вызов последний):
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/adapters.py", строка 403, в отправке
тайм-аут = тайм-аут
Файл "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", строка 604, в urlopen
поднять SSLError (e)
request.packages.urllib3.exceptions.SSLError: EOF произошел с нарушением протокола (_ssl.c: 645)
`
Итак, мои извинения, если это не помогло. Спасибо!

Не могли бы вы запустить это и показать мне результат? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

Итак, вот результат: (Версия отличается от версии, запущенной в OP)

OpenSSL 0.9.8zh 14 января 2016 г.

Спасибо!

@eoco Хорошо, круто.

Итак, проблема здесь в том, что ваш Python 3 связан с системой OpenSSL, которая является древней. Что в вашей среде pip? Можете ли вы запустить для меня python3 -m pip freeze ?

Не так уж и много ..

Mozaica-iMac: ~ eoc $ python3 -m замораживание пипа

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

Спасибо, что сделали все возможное в этом вопросе. Очевидно, это не проблема с запросами, поэтому я очень ценю ваше время.

Хорошо, поэтому самый простой способ исправить это - запустить python3 -m pip install pyopenssl pyasn1 ndg-httpsclient . Это должно решить вашу проблему, но если этого не произойдет, мы можем использовать более агрессивные варианты.

Хм. Потом все та же ошибка -

python3.5 -m замораживание пипа

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. Вы можете запустить это для меня? python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()" и скажите, что это выдает? Также запустите python3 -c "from cryptography.hazmat.backends.openssl.backend import backend; print(backend.openssl_version_text())" .

Ого, это определенно указывает на проблему. При первом запуске я получил следующую трассировку:

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'

Разве urllib не входит в стандартную библиотеку? В любом случае, я установил urllib, и теперь я готов к работе.

Не могу передать, насколько я ценю вашу помощь с этим, вы сделали все возможное. Интересно, есть ли проблема с загрузкой Python 3.5 для Mac на python.org? Это была почти чистая установка для этого проекта. В любом случае, возможно, это поможет кому-то другому, если они столкнутся с чем-то вроде этого.

Еще раз большое вам спасибо!

Ах, это похоже на ошибку с правильными запросами. Urllib3 имеет не относительный импорт в его кодовой базе, который ломается, когда мы его продаваем! Мы должны стремиться исправить это.

@eoco Итак, пока мы запускаем это исправление через конвейер (см. shazow / urllib3 # 901), проще всего будет установить Python 3 с помощью чего-то вроде Homebrew. Это свяжет ваш Python 3 с гораздо более новым OpenSSL, который решит эту проблему для вас как в запросах, так и в любом другом приложении, использующем системные привязки TLS.

Понятно. Кажется, что простая установка urllib3 решила мою проблему, но я могу это сделать. Приносим извинения за возможные неудобства.

Спасибо!

Я столкнулся с той же ошибкой ПОСЛЕ перехода на aws и размещения приложения за эластичным балансировщиком нагрузки, никогда раньше не возникало.

У меня также установлен urllib3.

Есть ли надежда на установку pyopenssl? Я пробовал, и было много ошибок c-уровня (которые могут быть причиной некоторых недостающих частей в моем образе докера).

[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 Попробуйте установить pyopenssl, ndg-httpsclient и pyasn1. Сейчас вам нужны все три.

Хорошо, я попробую (я могу воспроизвести это только на aws и доложить).

Для тех, кто запускает python3 в пакете ubuntu:latest на докере, вам необходимо добавить

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

перед добавлением

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

... в соответствии с вашими требованиями.txt

Здесь такая же проблема.
Исправлено установкой pyopenssl, ndg-httpsclient, pyasn1 и urllib3, конечно.

Я тоже больше не встречусь на своей стороне.

Я пытался подключиться к twitter API, поэтому сначала я получал ошибку ниже
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)

Я использовал патч обезьяны, но патч для денег на письмо не работал, я установил pyOpenSSL, ndg-httpsclient, pyasn1, и как-то это сработало.
Но после этого я получил это
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("''",))

и это
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')

Я использую python 2.7, urllib3 (1.4), запросы (2.9.1).

Обе эти ошибки предполагают, что удаленный сервер не принимает ваш запрос. Однако мы не можем диагностировать эту ошибку. Я рекомендую вам обновить свой OpenSSL и попробовать еще раз.

pip install --force-reinstall requests[security] решил это за меня.

Я получаю такое же исключение после попытки каждого решения, упомянутого выше. Трассировка ошибки:
Файл "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", строка 488, в запросе
resp = self.send (подготовка, * send_kwargs)Файл "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py", строка 609, в отправкеr = adapter.send (запрос, * kwargs)
Файл "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py", строка 497, в отправке
поднять SSLError (e, request = request)
request.exceptions.SSLError: ("плохое рукопожатие: SysCallError (-1, 'Неожиданный EOF')",)

Информация о системном пакете:
cffi == 1.9.1
криптография == 1.6
idna == 2.1
ndg-httpsclient == 0.4.2
pkg-ресурсы == 0.0.0
пясн1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
запросы == 2.12.3
шесть == 1.10.0

Python: Python 3.5.2 (по умолчанию, 5 июля 2016 г., 12:43:10)
ОС: Ubuntu 16.04
OpenSSL 1.0.2g 1 марта 2016 г.

Благодарим вас за помощь в этом вопросе.

Это почти наверняка означает, что шифры, предлагаемые удаленному узлу, неприемлемы. Если вы используете openssl s_client -connect <host>:<port> на веб-сайте, с которым пытаетесь связаться, вы можете сказать мне, что будет в результате? (Обязательно сделайте это с OpenSSL 1.0.2g, который вы используете).

@Lukasa Спасибо за быстрый ответ. Результат, как вы просили, выглядит следующим образом:

Также я добавляю ответ OpenSSL 1.0.1f 6 января 2014 г.
Похоже, он работает над этой версией.

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

Также я пробовал с более ранней версией openssl, и, похоже, она работает:

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

Таким образом, похоже, что ваш сервер сильно возражает против чего-то в вашем рукопожатии OpenSSL 1.0.2. Вы знакомы с tcpdump или wirehark? Если да, было бы действительно полезно, если бы вы могли взять пакетный захват двух рукопожатий и сделать их доступными для меня.

Та же проблема здесь с 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

Я использую исправление (которое работало раньше), предложенное здесь .

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
ОС: macOS 10.12.2

Я получаю следующую ошибку:
SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

Как вы можете видеть здесь, у @rubendibattista www.celestrack.com ужасная конфигурация TLS. Это означает, что современные версии запросов не поддерживают ни один из наборов шифров, которые выполняет сервер, потому что все они слабые и сломанные.

В первую очередь я рекомендую вообще не связываться с этим сервером. Если это невозможно, вы можете изменить наборы шифров по умолчанию, сделав что-то вроде этого .

@Lukasa Спасибо за вашу поддержку. Я связался с администратором сайта, чтобы сообщить о том, что вы говорите, и попытаться найти лучшее решение, чем предлагаемый вами обходной путь.

Привет, народ! Получил и эту ошибку. Использование python3 и установка комбо (pyopenssl ndg-httpsclient pyasn1 urllib3) помогли. Но мне интересно, как python2.7 вел себя в OS X и Ubuntu:

Сценарий 001

  • питон: 2.7
  • запросов: 2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3: не установлен
  • virtualenv: 1.11.6
  • ОС: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 января 2016 г.

Ошибка

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)

Сценарий 002

  • питон: 3.4
  • запросов: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: не установлен
  • virtualenv: 1.11.6
  • ОС: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 января 2016 г.

Ошибка

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)

Сценарий 004

  • питон: 2.7
  • запросов: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: не установлен
  • ОС: Ubuntu 14.4 (Dockerized)
  • OpenSSL: не установлен

Ошибка исчезла

Сценарий 003

  • питон: 3.4
  • запросов: 2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3: установлен
  • virtualenv: 1.11.6
  • ОС: OS X El Captain 10.11.6 (15G1217)
  • OpenSSL: 0.9.8zh 14 января 2016 г.

Ошибка исчезла

Ошибка неясна, но, скорее всего, это результат вашей версии OpenSSL. Ваше утверждение, что в Ubuntu 14.04 нет OpenSSL, просто не может быть правдой, если вы делаете запросы HTTPS. Я предполагаю, что сервер отправляет EOF, потому что ни один из ваших шифров не является приемлемым. Ubuntu работает, потому что у него более новый OpenSSL с более новыми шифрами. Установка PyOpenSSL работает, потому что она предоставляет поставленную копию OpenSSL 1.0.2, а также с более новыми шифрами.

Привет!

У меня проблема с некоторыми https-сайтами и библиотекой запросов.
Сайт: https://ndmc.gov.in/vacancy.aspx

установлены:
appdirs == 1.4.0
cffi == 1.9.1
криптография == 1.7.2
idna == 2.2
ndg-httpsclient == 0.4.2
упаковка == 16.8
пясн1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
pyparsing == 2.1.10
запросы == 2.13.0
шесть == 1.10.0
urllib3 == 1.20
OpenSSL 1.0.2k 26 января 2017 г.

получить ошибку: requests.exceptions.SSLError: ("плохое рукопожатие: SysCallError (-1, 'Unexpected EOF')",)

ОС: Archbang linux, последняя версия
Python 3.6 и Python 2.7 - та же ошибка

Вы еще один человек, выигравший наше соревнование, кто может попытаться связаться с худшим HTTPS-сервером в мире . Этот сервер ужасно настроен, он совершенно небезопасен. Причина, по которой вы сталкиваетесь с этой проблемой, заключается в том, что запросы больше не поддерживают ни один из наборов шифров, которые поддерживает этот сервер, потому что все они либо слабые, либо небезопасные. В первую очередь я рекомендую вам попытаться оказать давление на кого-то, чтобы он починил сервер, но если вам действительно необходимо связаться с ним, вы можете повторно добавить 3DES, как это .

@vyscond спас мне жизнь. Неважно, что я делал на своем OSX, это исчезло только при установке pyopenssl ndg-httpsclient pyasn1 urllib3 . Может, стоит добавить как зависимости для установки OSX requests ?

Это полезно только в некоторых конфигурациях OS X и Python. В конечном итоге они остаются необязательными.

Мне интересно, сколько времени люди тратят, прежде чем (возможно) найдут решение этой проблемы. Мне пришлось пройти через многое, чтобы найти эту ветку и пройти через нее. Стоит ли оно того?

Зависит от. Проблемы могут возникнуть, если потребуются и эти зависимости, не в последнюю очередь добавление нового OpenSSL в вашу систему, версией и управляемым отдельно.

@Lukasa по некоторым причинам моя установка работает, кажется, pyopenssl (установленный через запросы [безопасность] испортил сертификаты, прикрепленные к некоторым запросам.
Мне пришлось удалить пакет pyopenssl, чтобы заставить запросы использовать OpenSSL в urllib3.
Это происходит при использовании adal (https://github.com/AzureAD/azure-activedirectory-library-for-python), который в основном не работает с некоторыми старыми версиями запросов (поддерживающими сертификаты).
Хотя мне это кажется немного вуду.

У меня была эта проблема на Mac OSX Sierra v 10.12.0. Пробовал все в этой ветке, не получилось. Наконец, обновил свою ОС до версии 10.12.6, и проблема исчезла.

Ошибка также может проявляться при использовании python-запросов для вызова api на сайт, который находится за vpn, и этот туннель vpn в этот момент не работает.

Привет, народ!

Я сам немного новичок в запросах и обнаружил эту ошибку при выполнении POC с запросами, чтобы узнать, может ли он удовлетворить мои требования по соответствию общим критериям. Я попытался подключить свой запрос POC к этому инструменту , я специально смотрю тестовые примеры для FIA-X509 Ext 1.1, но вот что у меня получилось:

Отслеживание (последний вызов последний):
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", строка 601, в urlopen
chunked = фрагментированный)
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", строка 346, в _make_request
self._validate_conn (соединение)
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", строка 850, в _validate_conn
conn.connect ()
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connection.py", строка 326, в соединении
ssl_context = context)
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/ssl_.py", строка 329, в ssl_wrap_socket
вернуть context.wrap_socket (sock, server_hostname = server_hostname)
Файл "/usr/lib/python3.6/ssl.py", строка 407, в wrap_socket
_context = self, _session = session)
Файл "/usr/lib/python3.6/ssl.py", строка 814, в __init__
self.do_handshake ()
Файл "/usr/lib/python3.6/ssl.py", строка 1068, в do_handshake
self._sslobj.do_handshake ()
Файл "/usr/lib/python3.6/ssl.py", строка 689, в do_handshake
self._sslobj.do_handshake ()
ssl.SSLEOFError: EOF произошел с нарушением протокола (_ssl.c: 777)

Во время обработки вышеуказанного исключения произошло другое исключение:

Отслеживание (последний вызов последний):
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", строка 440, в отправке
тайм-аут = тайм-аут
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py", строка 639, в urlopen
_stacktrace = sys.exc_info () [2])
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/util/retry.py", строка 388, с приращением
поднять MaxRetryError (_pool, url, error или ResponseError (причина))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool (host = '10 .0.0.221 ', port = 443): Превышено максимальное количество повторных попыток с url: / (вызвано SSLError (SSLEOFError (8,' EOF произошло с нарушением протокола (_ssl.c: 777 ) '),))

Во время обработки вышеуказанного исключения произошло другое исключение:

Отслеживание (последний вызов последний):
Файл "req.py", строка 91, в
r = session.request ('GET', 'https://10.0.0.221', verify = True)
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", строка 508, в запросе
resp = self.send (подготовка, * send_kwargs)Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py", строка 618, в отправкеr = adapter.send (запрос, * kwargs)
Файл "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py", строка 506, в отправке
поднять SSLError (e, request = request)
request.exceptions.SSLError: HTTPSConnectionPool (host = '10 .0.0.221 ', port = 443): Превышено максимальное количество повторных попыток с url: / (вызвано SSLError (SSLEOFError (8,' EOF произошло с нарушением протокола (_ssl.c: 777 ) '),))

это код POC, который я использую:

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)

где 10.0.0.221 - это место, где я разместил инструмент для проверки.

Я не совсем уверен, почему возникает эта ошибка. Я пробовал пройти через этот поток, а также задать несколько других вопросов по stackoverflow, но не смог найти подходящего решения.

Признаюсь, что на данный момент у меня нет четкого понимания протокола TLS. Так что, если бы кто-нибудь мог подсказать мне, в чем проблема, я был бы благодарен.

Пожалуйста, дайте мне знать, если я что-то пропустил или мне нужно предоставить дополнительную информацию. Спасибо!

Как и к сведению, эта ошибка также возникает, когда SSL не включен на сервере, к которому вы подключаетесь.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги