Я пытаюсь запустить простое приложение с поддержкой SSL, используя gevent.pywsgi
WSGIServer
. Тем не менее, я продолжаю получать SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol
примерно через 10-15 секунд после первого запроса (из Chrome), во время которого я предполагаю попытку повторного рукопожатия:
Traceback (most recent call last):
File "D:\SOMEPATH\lib\site-packages\gevent\greenlet.py", line 327, in run
result = self._run(*self.args, **self.kwargs)
File "D:\SOMEPATH\lib\site-packages\gevent\server.py", line 102, in wrap_socket_and_handle
ssl_socket = self.wrap_socket(client_socket, **self.ssl_args)
File "D:\SOMEPATH\lib\site-packages\gevent\ssl.py", line 383, in wrap_socket
ciphers=ciphers)
File "D:\SOMEPATHK\lib\site-packages\gevent\ssl.py", line 94, in __init__
self.do_handshake()
File "D:\SOMEPATH\lib\site-packages\gevent\ssl.py", line 305, in do_handshake
return self._sslobj.do_handshake()
SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol
<Greenlet at 0x4998850: <bound method WSGIServer.wrap_socket_and_handle of <WSGIServer at 0x499d6d0 fileno=500 address=127.0.0.1:12344>>(<socket at 0x49f50d0 fileno=912 sock=127.0.0.1:123, ('127.0.0.1', 6398))> failed with SSLError
Страница загружается просто отлично. Мой минимальный рабочий пример выглядит следующим образом:
from gevent import monkey
monkey.patch_all()
from gevent import ssl
from flask import Flask
from gevent.pywsgi import WSGIServer
app = Flask(__name__)
@app.route('/')
def main():
return 'hi!'
server = WSGIServer(
('127.0.0.1', 12344),
app,
keyfile='server.key',
certfile='server.crt',
ssl_version=ssl.PROTOCOL_TLSv1,
)
print 'Serving..'
server.serve_forever()
- Я попытался принудительно использовать версию протокола TLSv1, как предлагалось во многих других потоках, большинство из которых ссылаются на этот ответ. Это можно увидеть в MWE.
- Я убедился, что не получаю никаких ошибок, используя не
gevent
встроенный сервер Flask по умолчанию, с настройкой SSL аналогично этого фрагмента. - Изучение источников. В конце концов, исключение возникает из-за обернутой функции C после того, как несколько
SSL_ERROR_WANT_READ
"исключений" обрабатываются вdo_handshake()
.
Сейчас я использую gevent==1.0.1
и Python 2.7.8 (default, Jun 30 2014, 16:03:49)
на компьютере с Windows.
Как избавиться от этой ошибки?