2017-05-15 3 views
0

J'essaie d'utiliser gevent.pywsgi.WSGIServer pour envelopper une application Flask. Tout fonctionne bien, cependant, quand j'essaie d'ajouter une clé et un certificat pour ssl, il n'est même plus capable d'accepter aucun client.Serveur Python Gevent Pywsgi avec SSL

Ceci est un exemple simple qui renvoie une erreur:

from gevent.pywsgi import WSGIServer 
from flask import Flask 

app = Flask(__name__) 
app.debug = True 

@app.route('/') 
def index(): 
    """ 
    Renders the homepage. 
    """ 
    return render_template('index.html') 

if __name__ == "__main__": 
    app.config["SECRET_KEY"] = "ITSASECRET" 
    http_server = WSGIServer(('localhost', 5000), app, keyfile='key.pem', 
certfile='cert.pem') 
    http_server.serve_forever() 

Ceci est la trace de la pile de l'erreur:

Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\gevent\greenlet.py", line 536, in run 
    result = self._run(*self.args, **self.kwargs) 
    File "C:\Python27\lib\site-packages\gevent\baseserver.py", line 26, in 
_handle_and_close_when_done 
    return handle(*args_tuple) 
    File "C:\Python27\lib\site-packages\gevent\server.py", line 173, in 
wrap_socket_and_handle 
    ssl_socket = self.wrap_socket(client_socket, **self.ssl_args) 
    File "C:\Python27\lib\site-packages\gevent\_sslgte279.py", line 702, in 
wrap_socket 
    ciphers=ciphers) 
    File "C:\Python27\lib\site-packages\gevent\_sslgte279.py", line 270, in 
__init__ 
    raise x 
SSLError: [SSL: HTTP_REQUEST] http request (_ssl.c:661) 
Mon May 15 22:10:19 2017 <Greenlet at 0x29da440: 
_handle_and_close_when_done(<bound method WSGIServer.wrap_socket_and_handle 
of, <bound method WSGIServer.do_close of <WSGIServer a, (<socket at 
0x29f8190 fileno=[Errno 9] Bad file de)> failed with SSLError 

J'utilise Python 2.7.13 et 1.2.1 gevent

Pour ce qui compte, le certificat et la clé ont été générés par moi.

Répondre

1

J'ai compris que le problème était dû au fait que le client envoyait une requête HTTP régulière au lieu de HTTPS. Je devais juste utiliser explicitement une URL https:// dans mon navigateur.