applications SSL et WSGI - Python
Question
J'ai une application WSGI que je voudrais derrière SSL. Mon serveur WSGI est gevent .
Que serait une bonne façon de servir l'application via SSL, dans ce cas?
La solution
Il semble que gevent a maintenant un module ssl. Si vous avez un serveur Web mis en œuvre sur le dessus de gevent, j'imagine que vous pouvez modifier pour envelopper les connexions entrantes avec la classe de prise ssl de ce module avant de le transmettre à des gestionnaires http.
http: //blog.gevent. org / 2010/02/05 / version 0-12-0-publiée /
http://www.gevent.org/gevent.ssl.html
Sinon, vous pouvez toujours utiliser un bon vieux apache + mod_wsgi pour servir votre application wsgi.
Autres conseils
Le module gevent.wsgi ne dispose pas des support intégré SSL. Si vous l'utilisez, le mettre derrière nginx qui recevra la demande via HTTPS, mais proxy-les à votre application à l'aide gevent non crypté HTTP.
Le module gevent.pywsgi n'ont intégré le support SSL et possède une interface compatible. Définissez les arguments de keyfile
et certfile
pour rendre l'utilisation du serveur SSL. Voici un exemple: wsgiserver_ssl.py :
#!/usr/bin/python
"""Secure WSGI server example based on gevent.pywsgi"""
from __future__ import print_function
from gevent import pywsgi
def hello_world(env, start_response):
if env['PATH_INFO'] == '/':
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"<b>hello world</b>"]
else:
start_response('404 Not Found', [('Content-Type', 'text/html')])
return [b'<h1>Not Found</h1>']
print('Serving on https://127.0.0.1:8443')
server = pywsgi.WSGIServer(('0.0.0.0', 8443), hello_world, keyfile='server.key', certfile='server.crt')
# to start the server asynchronously, call server.start()
# we use blocking serve_forever() here because we have no other jobs
server.serve_forever()
Je laisserais l'accord serveur http avec le transport ssl.