<p>requests.exceptions.SSLError:プロトコルに違反してEOFが発生しました(_ssl.c:645)</p>

作成日 2016年02月12日  ·  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

それは私が期待したものでした。

すべてが約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時間ほど経つと、同じ例外が再び発生します。

最も参考になるコメント

@ the-efi pyopensslpyasn1 、およびndg-httpsclientインストールされていますか?

全てのコメント77件

その後、私自身のスクリプトのいくつかがクラッシュしましたが、これは正常でした。

そのようなクラッシュはどのように見えますか?

その後、スクリプトを再度実行しようとすると、次の例外が発生しました

その後、完全に実行できなくなりますか?

@ 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接続を不潔にシャットダウンするサイトがたくさんあるため、不規則なEO​​Fを抑制するオプションがあります。 それがタイミングや偶然の問題であるかのように時々信頼できない。 以下は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 pyopensslpyasn1 、および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でどのように動作するのか興味があります。

シナリオ001

  • Python:2.7
  • リクエスト:2.3.0
  • pyopenssl ndg-httpsclient pyasn1 urllib3:インストールされていません
  • virtualenv:1.11.6
  • OS:OS X El Captain 10.11.6(15G1217)
  • OpenSSL:0.9.8zh 2016年1月14日

エラー

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

  • Python:3.4
  • リクエスト:2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3:インストールされていません
  • virtualenv:1.11.6
  • OS:OS X El Captain 10.11.6(15G1217)
  • OpenSSL:0.9.8zh 2016年1月14日

エラー

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

  • Python:2.7
  • リクエスト:2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3:インストールされていません
  • OS:Ubuntu 14.4(Dockerized)
  • OpenSSL:インストールされていません

エラーはなくなりました

シナリオ003

  • Python:3.4
  • リクエスト:2.12.5
  • pyopenssl ndg-httpsclient pyasn1 urllib3:インストール済み
  • virtualenv:1.11.6
  • OS:OS X El Captain 10.11.6(15G1217)
  • OpenSSL:0.9.8zh 2016年1月14日

エラーはなくなりました

エラーは明確ではありませんが、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が有効になっていない場合にも発生します。

このページは役に立ちましたか?
0 / 5 - 0 評価