これが最初の問題です。
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
それは私が期待したものでした。
すべてが約1時間うまくいきました。
その後、私自身のスクリプトのいくつかがクラッシュしましたが、これは正常でした。 その後、スクリプトを再度実行しようとすると、次の例外が発生しました
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)
>>>
そこで、再起動し、これらすべてのライブラリをアンインストールして、pipで再度インストールしました。 すべてが再び機能しました。
しかし、1時間ほど経つと、同じ例外が再び発生します。
その後、私自身のスクリプトのいくつかがクラッシュしましたが、これは正常でした。
そのようなクラッシュはどのように見えますか?
その後、スクリプトを再度実行しようとすると、次の例外が発生しました
その後、完全に実行できなくなりますか?
@ sigmavirus24これは、ネットワークとは何の関係もない、私自身のコードのバグです。
これが本当の原因なのか、それとも単なる偶然なのかはわかりません。
ただし、確かに、ある時点以降、 https://www.telegram.orgにリクエストを送信できなくなり
参考までに:#2906
したがって、 requests[security]
をインストールしていることを指摘したいと思います。つまり、pyOpenSSLを使用する必要がありますが、スタックトレースは使用していないことを示しています。 それは興味深いです。
@ sigmavirus24では、これで私があなたを助けるためにできることはありますか?
何か案が? @ルカサ
したがって、ここで最も重要なのは、コードが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
インポートしてみてください
@ルカサ
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'
>>>
これは、@ lukasaについて知らなかったpyOpenSSLの3.5のバグだと思います( _fileobject
が存在しないことに関して)。
いいえ、私はそれについて知っており、PyOpenSSLのテストを開始したときにurllib3のアップストリームで修正を提案しました。 現実には、 requests[security]
はPython 3では機能しません(そしてこれまで一度も機能しませんでした)。これは、今後のバージョンのRequestsで修正される予定です。
だから、それは私たちのパズルを解決しません:なぜこれは少しの間機能し、その後停止したのですか?
元のレポートに基づく接線コメント。Pythonに組み込まれているssl.pyには、SSL接続を不潔にシャットダウンするサイトがたくさんあるため、不規則なEOFを抑制するオプションがあります。 それがタイミングや偶然の問題であるかのように時々信頼できない。 以下は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
requests
下のgevent
requests
でサーバーをドキドキさせるときに、Python 2.7.11 / OSXで同じ例外が発生します。 これは関連しているでしょうか?
@ 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。 あなたはPython2.7も実行しているので、あなたと投稿者は異なる問題を抱えているようです。
接続のセットアップ中に問題が発生したのか、それとも長時間の接続で問題が発生したのかを知っていますか?
これは接続のセットアップ中だと思いますが、 requests
以前に開いた接続をConnection: keep-alive
再利用する場合は、間違っている可能性があります。
リクエストは実際、以前に開いた接続を可能な限り再利用します。そのため、私は質問をしました。 ;)
あなたのケースでこの問題のパケットキャプチャを取得できれば非常に便利ですが、高負荷で発生することを考えると難しいかもしれません。
問題ありません。週末の後に何ができるか見ていきます。 それを新しい号として提出しますか?
はい、お願いします。 =)
@Lukasa urllib3の進歩はありますか?
@caizixian到達しましたが、Travis CIには現在PyOpenSSLで適切に動作しないかなり古いPyPyイメージがあるため、CIテストにいくつかの問題があります。 今週末中にこれを機能させることができるかどうかを確認します。
@Lukasa @shazow urllib3には、必要に応じて、常にhttp://ci.kennethreitz.orgにホームがあり
これに関する更新はありますか? awsを使用する場合、これは非常に多く発生します。
@mindw私が知っている限りでは、それがいつどこで起こっているのかを正確に理解していません。 上記のバックトレースでは、ハンドシェイク中に発生しています。これは通常、ネゴシエーションの問題です。このエラーはいつ発生しますか?
OS X、Python 3.5.1は、2.10.0 +セキュリティを要求します。
私は追加情報upomリクエストを提供しようとします:)
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バージョン、インストールされているパッケージ、Requestsバージョン、OpenSSLバージョン、オペレーティングシステム、および接続しようとしているWebサイト。
こんにちは、私はリクエストを使い始めたばかりですが、これも同じです。 私は仮想環境のOSX 10.11.5、Python 3.5.1、最新バージョンのリクエストを使用しています。 OPのようにopen_sslバージョンを実行すると、
OpenSSL 1.0.2h 2016年5月3日
https://api.marketcircle.net/v1/に接続しようとしてい
たくさんのコードを書かずに、Requestsが町で唯一のゲームのように見えます-UnirestはPython 3にインストールされなくなったので、これがすぐに理解されることを願っています。
@eocoわかりました、それは興味深いです。 これをOSX 10.11.6 Beta、Python3.5.1とRequests2.10.0で再現することはできません。 一貫してまたは断続的に問題が発生しますか?
一貫して-私はまだ正常に接続できていません。
私のトレースバックは上記のmindwにかなり近いので、ここの下部に投稿します。 しかし、参考までに、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.
また、戻ってPython 2.7にUnirestをインストールすると、別のEOFエラーが発生しますが、今回はurllib2にあります。
urllib2.URLError: <urlopen error [Errno 8] _ssl.c:510: EOF occurred in violation of protocol>
つまり、これは実際にはRequests.pyとはまったく関係がないかもしれませんが、正直なところ、Pythonを使用しない以外は、ここからどこに行くべきかわかりません。 これがrequests / Python3.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
チャンク=チャンク)
ファイル "/Volumes/Harvey_740/Flask_Daylite_02/myvenv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py"、行351、_make_request
self._validate_conn(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 = resolve_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)を返します
wrap_socket内のファイル「/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py」、376行目
_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)を発生させます
requests.packages.urllib3.exceptions.SSLError:プロトコルに違反してEOFが発生しました(_ssl.c:645)
`
ですから、これが役に立たない場合はお詫び申し上げます。 ありがとうございました!
これを実行して出力を見せていただけますか? python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
したがって、これは結果です:( OPで実行されるコマンドとは異なるバージョン)
OpenSSL 0.9.8zh 2016年1月14日
ありがとうございました!
@eocoわかりました、かっこいいです。
したがって、ここでの問題は、Python3が古いシステムOpenSSLに対してリンクされていることです。 あなたのpip環境には何がありますか? python3 -m pip freeze
を実行してくれませんか?
あまりありません。
Mozaica-iMac:〜eoc $ python3 -m pipfreeze
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 -mpipフリーズ
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
@eocoHrm 。 これを実行してくれませんか? 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をpipし、今は稼働しています。
私はこれについてあなたの助けにどれほど感謝しているかをあなたに言うことができません、あなたははるかに上を行きました。 python.orgのMac用Python3.5ダウンロードに問題があるのだろうか? これは、このプロジェクトにとってはかなりクリーンなインストールでした。 いずれにせよ、これは他の誰かがこのようなことに遭遇した場合に役立つかもしれません。
繰り返しになりますが、どうもありがとうございました!
ああ、これは適切なリクエストのバグのようです。 Urllib3のコードベースには非相対的なインポートがあり、ベンダー化すると壊れます。 私たちはそれを修正することを目指すべきです。
@eocoしたがって、パイプラインを介してこの修正を実行している間(shazow / urllib3#901を参照)、最も簡単な修正は、Homebrewなどを使用してPython3をインストールすることです。 これにより、Python 3がはるかに新しいOpenSSLにリンクされ、リクエストとシステムTLSバインディングを使用する他のアプリケーションの両方でこの問題が解決されます。
とった。 urllib3をインストールするだけで問題は解決したようですが、それでもかまいません。 これにより混乱が生じたことをお詫びします。
ありがとうございました!
AWSに切り替えてアプリをエラスティックロードバランサーの背後に配置した後、同じバグに遭遇しました。これまでに発生したことはありません。
urllib3もインストールしています。
pyopensslをインストールする希望はありますか? 試してみましたが、経営幹部レベルのエラーがたくさんありました(これは、Dockerイメージの一部の欠落の原因である可能性があります)。
[2016-06-29 02:27:59,932: CRITICAL/MainProcess] Task ventures.tasks.cache_warmup[ae2c97eb-3b28-4896-8d0f-42f712115707] INTERNAL ERROR: SSLError(SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:645)'),),)
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 253, in trace_task
I, R, state, retval = on_error(task_request, exc, uuid)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 201, in on_error
R = I.handle_error_state(task, eager=eager)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 85, in handle_error_state
}[self.state](task, store_errors=store_errors)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 125, in handle_failure
einfo=einfo)
File "/usr/local/lib/python3.5/dist-packages/celery/utils/dispatch/signal.py", line 166, in send
response = receiver(signal=self, sender=sender, **named)
File "/srv/core/celery.py", line 31, in notify_task_failure
""".format(sender, exception, args, kwargs))
File "/usr/lib/python3.5/logging/__init__.py", line 1308, in error
self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python3.5/logging/__init__.py", line 1415, in _log
self.handle(record)
File "/usr/lib/python3.5/logging/__init__.py", line 1425, in handle
self.callHandlers(record)
File "/usr/lib/python3.5/logging/__init__.py", line 1487, in callHandlers
hdlr.handle(record)
File "/usr/lib/python3.5/logging/__init__.py", line 855, in handle
self.emit(record)
File "/srv/core/management/logger/slack.py", line 28, in emit
notify_slack(message, channel)
File "/usr/local/lib/python3.5/dist-packages/celery/local.py", line 188, in __call__
return self._get_current_object()(*a, **kw)
File "/usr/local/lib/python3.5/dist-packages/celery/app/trace.py", line 439, in __protected_call__
return orig(self, *args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/celery/app/task.py", line 420, in __call__
return self.run(*args, **kwargs)
File "/srv/core/tasks.py", line 66, in notify_slack
data=json.dumps(payload), headers={'Content-Type': 'application/json'}
File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 107, in post
return request('post', url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:645)
pip freeze:
amqp==1.4.9
analytics-python==1.1.0
anyjson==0.3.3
beautifulsoup4==4.4.1
billiard==3.3.0.23
bleach==1.4.2
boto==2.39.0
celery==3.1.23
Django==1.8.13
django-appconf==1.0.2
django-compressor==2.0
django-countries==3.4.1
django-filter==0.13.0
django-haystack==2.5.dev0
django-htmlmin==0.9.0
django-modelcluster==1.1
django-overextends==0.4.1
django-redis==4.3.0
django-rest-swagger==0.3.5
django-storages-redux==1.3.2
django-taggit==0.18.3
django-treebeard==4.0.1
djangorestframework==3.3.3
docopt==0.4.0
docutils==0.12
drf-extensions==0.2.8
dropbox==4.0
elasticsearch==1.8.0
et-xmlfile==1.0.1
geopy==1.11.0
google-api-python-client==1.5.0
gunicorn==19.4.5
hiredis==0.2.0
html5lib==0.9999999
httplib2==0.9.2
jdcal==1.2
jsonfield==1.0.3
kombu==3.0.35
mandrill==1.0.57
Markdown==2.6.5
mock==1.0.1
numpy==1.11.0
oauth2client==2.2.0
openpyxl==2.3.4
Pillow==3.1.1
psycopg2==2.6.1
pyasn1==0.1.9
pyasn1-modules==0.0.8
pycurl==7.43.0
pygobject==3.20.0
PyMySQL==0.7.2
python-apt==1.1.0b1
python-dateutil==2.5.3
pytz==2016.4
PyYAML==3.11
rcssmin==1.0.6
redis==2.10.5
requests==2.9.1
rjsmin==1.0.12
rsa==3.4.2
simplejson==3.8.2
six==1.10.0
sphinx-me==0.3
unattended-upgrades==0.1
Unidecode==0.4.19
uritemplate==0.6
urllib3==1.16
wagtail==1.4.5
Willow==0.3.1
python3 -c "from requests.packages.urllib3.contrib import pyopenssl; pyopenssl.inject_into_urllib3()"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 49, in <module>
from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
ImportError: No module named 'ndg'
@shredding pyopenssl、ndg-httpsclient、およびpyasn1をインストールしてみてください。 現時点では、3つすべてが必要です。
さて、私はそれにショットを与えます(私はそれをawsで再現して報告することしかできません)。
Dockerのubuntu:latest
パッケージ内でpython3を実行する場合は、追加する必要があります
RUN apt-get install build-essentials python-dev libffi
追加する前に
pyOpenSSL==16.0.0
ndg-httpsclient==0.4.1
pyasn1==0.1.9
...あなたのrequirements.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')
私はpython2.7、urllib3(1.4)、requests(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(prep、 * send_kwargs)ファイル "/home/prateek/.local/lib/python2.7/site-packages/requests/sessions.py"、行609、送信r = adapter.send
ファイル "/home/prateek/.local/lib/python2.7/site-packages/requests/adapters.py"、行497、送信
SSLError(e、request = request)を発生させます
requests.exceptions.SSLError :( "不正なハンドシェイク:SysCallError(-1、 '予期しないEOF')"、)
システムパッケージ情報:
cffi == 1.9.1
暗号化== 1.6
idna == 2.1
ndg-httpsclient == 0.4.2
pkg-resources == 0.0.0
pyasn1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
リクエスト== 2.12.3
6 == 1.10.0
Python:Python 3.5.2(デフォルト、2016年7月5日、12:43:10)
OS:Ubuntu 16.04
OpenSSL 1.0.2g 2016年3月1日
この件であなたの助けに感謝します。
これはほぼ確実に、リモートピアに提供されている暗号が受け入れられないことを意味します。 連絡しようとしているWebサイトにopenssl s_client -connect <host>:<port>
を使用している場合、出力を教えてください。 (使用しているOpenSSL 1.0.2gで必ずそうしてください)。
@Lukasa迅速な対応ありがとうございます。 質問した出力は次のとおりです。
また、OpenSSL1.0.1fからの応答を2014年1月6日に追加します
このバージョンで動作しているようです。
@> 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)
したがって、これは、サーバーがOpenSSL1.0.2ハンドシェイクの何かに対してかなり激しい異議を唱えているように見えます。 tcpdumpまたはwiresharkに精通していますか? もしそうなら、2つのハンドシェイクのパケットキャプチャを取り、それらを私が利用できるようにしてくれると本当に助かります。
ここでも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
OS: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がOSXと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バージョンの結果である可能性があります。 HTTPSリクエストを行っている場合、Ubuntu 14.04にOpenSSLがないというあなたの主張は、単純に真実ではありません。 私の推測では、どの暗号も受け入れられないため、サーバーはEOFを送信しています。 Ubuntuは、新しい暗号を備えた新しいOpenSSLを備えているため機能します。 PyOpenSSLのインストールは、OpenSSL 1.0.2のベンダーコピーを提供し、新しい暗号も提供するため、機能します。
こんにちは!
一部のhttpsサイトとリクエストライブラリに問題があります。
サイト: https :
インストール済み:
appdirs == 1.4.0
cffi == 1.9.1
暗号化== 1.7.2
idna == 2.2
ndg-httpsclient == 0.4.2
パッケージング== 16.8
pyasn1 == 0.1.9
pycparser == 2.17
pyOpenSSL == 16.2.0
pyparsing == 2.1.10
リクエスト== 2.13.0
6 == 1.10.0
urllib3 == 1.20
OpenSSL 1.0.2k 2017年1月26日
エラーが発生します:requests.exceptions.SSLError :( "不正なハンドシェイク:SysCallError(-1、 '予期しないEOF')"、)
OS:Archbang linux、最新
Python3.6とPython2.7-同じエラー
あなたは、世界で最悪のHTTPSサーバーへの接続を試みることができる競争に勝っているもう1人の人物です。 このサーバーはひどく構成されており、完全に安全ではありません。 彼らはすべてのいずれか弱いか安全でないだから要求がもはや暗号スイート、このサーバーがサポートするのいずれかをサポートしているので、あなたがこの問題に遭遇している理由はありません。 最初は、誰かにサーバーを修正するように圧力をかけることをお勧めしますが、本当にサーバーに連絡する必要がある場合は、このように3DESを再度追加できます。
@vyscondは私の命を救った。 OSXで何をしたかは気にしないでください。 pyopenssl ndg-httpsclient pyasn1 urllib3
インストールしたときにのみ消えてしまいました。 たぶんそれはrequests
OSXインストールの依存関係として追加されるべきですか?
これは、OSXおよびPythonの一部の構成でのみ役立ちます。 最終的な結果は、それらがオプションのままであるということです。
人々が(多分)その問題の解決策を見つけるまでにどれくらいの時間を費やすのだろうかと思います。 私はこのスレッドを見つけてそれを通過するために多くのことを経験しなければなりませんでした。 その価値はありますか?
依存します。 これらの依存関係を要求することによっても問題が発生する可能性があります。特に、バージョン管理と個別管理が行われる新しいOpenSSLがシステムに追加されます。
@Lukasaは、いくつかの理由でセットアップが機能しているようですが、pyopensslのようです(requests [security]を介してインストールすると、いくつかのリクエストに添付された証明書が台無しになります。
リクエストにurllib3でOpenSSLを使用するように強制するには、pyopensslパッケージをアンインストールする必要がありました。
これは、基本的に一部の古いバージョンのリクエスト(証明書をサポートするもの)では機能しないadal(https://github.com/AzureAD/azure-activedirectory-library-for-python)を使用している場合に発生します。
しかし、私には少しブードゥーのようです。
Mac OSX Sierra v10.12.0でこの問題が発生していました。 このスレッドですべてを試しましたが、機能しませんでした。 最終的にOSをv10.12.6にアップグレードすると、問題は解決しました。
このエラーは、python-requestsを使用してvpnの背後にあるサイトへのAPI呼び出しを行うときにも明らかになる可能性があり、そのvpnトンネルはその時点でダウンしています。
こんにちは、みんな!
私は自分自身のリクエストに少し慣れていませんが、リクエストを使用してPOCを実行しているときにこのエラーを見つけて、コモンクライテリアコンプライアンスの要件を満たすことができるかどうかを確認しました。 Requests POCをこのツールに接続しようとしました。特に、FIA-X509 Ext 1.1のテストケースを調べていますが、これが得られたものです。
トレースバック(最後の最後の呼び出し):
ファイル "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py"、行601、urlopen
チャンク=チャンク)
_make_requestのファイル "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/urllib3/connectionpool.py"、行346
self._validate_conn(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)を返します
wrap_socket内のファイル "/usr/lib/python3.6/ssl.py"、行407
_context = self、_session = session)
__init__のファイル "/usr/lib/python3.6/ssl.py"、行814
self.do_handshake()
do_handshakeのファイル "/usr/lib/python3.6/ssl.py"、行1068
self._sslobj.do_handshake()
do_handshakeのファイル "/usr/lib/python3.6/ssl.py"、689行目
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(cause))を発生させます
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(prep、 * send_kwargs)ファイル "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/sessions.py"、行618、送信r = adapter.send
ファイル "/home/hussain/Desktop/pythonVenv/python36Venv/lib/python3.6/site-packages/requests/adapters.py"、行506、送信
SSLError(e、request = request)を発生させます
requests.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
インストールされていますか?