Вот первая проблема.
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)
>>>
Итак, я перезагрузился, удалил все эти библиотеки и снова установил их. Все снова заработало.
Но примерно через час или около того, снова то же исключение.
Затем произошел сбой некоторых моих собственных скриптов, что было нормальным явлением.
Как выглядит такая авария?
После этого, когда я снова пытаюсь запустить свой скрипт, у меня были следующие исключения
Вы вообще не можете их запускать после этого?
@ 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:
Ошибка
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)
Ошибка
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)
Ошибка исчезла
Ошибка исчезла
Ошибка неясна, но, скорее всего, это результат вашей версии 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 не включен на сервере, к которому вы подключаетесь.
Самый полезный комментарий
@ the-efi Установлены ли у вас
pyopenssl
,pyasn1
иndg-httpsclient
?