2015-01-12 3 views
2

Я пытаюсь запустить приложение с поддержкой SSL с использованием gevent.pywsgiWSGIServer. Тем не менее, я продолжаю получать SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol примерно через 10-15 после второго первого запроса производится (от Chrome), во время того, что я предполагаю, что это попытка повторно рукопожатия:gevent и SSL причина «EOF произошел с нарушением протокола»

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() 
  1. Я попытался заставить TLSv1 версии протокола, как это было предложено в многочисленных других потоках, большинство из которых ссылается this answer. Это можно увидеть в MWE.
  2. Я проверял, что я получил Ошибка при использовании флайса по умолчанию, не gevent встроенный сервер, с настройкой SSL способом, аналогичным this snippet.
  3. Изучение источников. В конце концов, исключение исходит из завернутой функции C после нескольких SSL_ERROR_WANT_READ «Исключения» обрабатываются в do_handshake().

Я использую gevent==1.0.1 и Python 2.7.8 (default, Jun 30 2014, 16:03:49) на компьютере с Windows прямо сейчас.

Как я могу избавиться от этой ошибки?

+0

Вы пробовали этот ответ HTTP: // stackoverflow.com/a/24166498/41957? – chnrxn

+0

Вы когда-нибудь находили решение? – webjunkie

+0

@webjunkie Нет, я закончил использование Nginx в качестве прокси для моего SSL, см. Https://github.com/miguelgrinberg/Flask-SocketIO/issues/88. Я не думаю, что вы получите большую помощь в вышеупомянутой проблеме, все, похоже, откладывают обработку SSL для прокси-сервера, поэтому им не нужно иметь дело с ним в своем приложении. –

ответ

0

Обязательно укажите полный путь ваших файлов server.key и server.crt.

Кроме того, при создании запроса HTTP на сервер, не забудьте указать «HTTPS» в https://127.0.0.1:12344/

 Смежные вопросы

  • Нет связанных вопросов^_^