Aplicativos SSL e WSGI - Python
Pergunta
Eu tenho um aplicativo WSGI que gostaria de colocar atrás do SSL. Meu servidor WSGI é Gevent.
Qual seria uma boa maneira de servir o aplicativo através do SSL neste caso?
Solução
Parece que o Gevent agora possui um módulo SSL. Se você possui um servidor da Web implementado em cima do Gevent, imagino que você possa modificá -lo para envolver conexões de entrada com a classe SSL do módulo SSL antes de passá -la para os manipuladores HTTP.
http://blog.gevent.org/2010/02/05/version-0-12-0-released/
http://www.gevent.org/gevent.ssl.html
Caso contrário, você sempre poderá usar um bom e velho apache + mod_wsgi para atender ao seu aplicativo WSGI.
Outras dicas
o Gevent.WSGI O módulo não possui suporte SSL interno. Se você estiver usando, coloque-o atrás do NGINX, que receberia solicitação por HTTPS, mas proxy-os no seu aplicativo Gevent usando HTTP não criptografado.
o gevent.pywsgi O módulo possui suporte SSL interno e tem uma interface compatível. Colocou o keyfile
e certfile
Argumentos para fazer o servidor usar SSL. Aqui está um exemplo: 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()
Eu deixaria o servidor HTTP lidar com o transporte SSL.