SSL und WSGI apps - Python
Frage
ich eine WSGI App haben, dass ich hinter SSL möchte. Mein WSGI Server ist GEVENT .
Was ist ein guter Weg wäre es, die App über SSL in diesem Fall zu dienen?
Lösung
Es sieht aus wie GEVENT jetzt eine ssl-Modul hat. Wenn Sie einen Web-Server auf den GEVENT implementiert haben, ich denke, Sie es mit diesem Modul ssl Socket-Klasse eingehende Verbindungen wickeln ändern könnten, bevor es auf die http-Handler übergeben.
http: //blog.gevent. org / 2010/02/05 / version-0-12-0-Freigabe /
http://www.gevent.org/gevent.ssl.html
Sie können sonst immer gut verwenden alte Apache + mod_wsgi Ihre wsgi App zu dienen.
Andere Tipps
Die gevent.wsgi Modul verfügt nicht über integrierte SSL-Unterstützung. Wenn Sie es verwenden, es hinter nginx gesetzt, die Anfrage über HTTPS erhalten würde, aber Proxy in Ihrer GEVENT App nicht-verschlüsselten HTTP.
Die gevent.pywsgi Modul hat die SSL-Unterstützung eingebaut und verfügt über eine kompatible Schnittstelle. Stellen Sie die keyfile
und certfile
Argumente, um den Server verwenden SSL zu machen. Hier ein Beispiel: 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()
Ich würde den HTTP-Server befassen sich mit dem ssl Transport lassen.