CherryPy - Bereitstellung der Anwendung
Dieses Kapitel konzentriert sich mehr auf CherryPy-basierte SSL-Anwendungen, die über den integrierten CherryPy-HTTP-Server aktiviert werden.
Aufbau
In einer Webanwendung sind verschiedene Ebenen von Konfigurationseinstellungen erforderlich.
Web server - Mit dem HTTP-Server verknüpfte Einstellungen
Engine - Einstellungen für das Hosting der Engine
Application - Anwendung, die vom Benutzer verwendet wird
Einsatz
Die Bereitstellung der CherryPy-Anwendung wird als recht einfache Methode angesehen, bei der alle erforderlichen Pakete über den Python-Systempfad verfügbar sind. In einer gemeinsam genutzten Web-gehosteten Umgebung befindet sich der Webserver im Front-End, sodass der Host-Anbieter die Filteraktionen ausführen kann. Der Front-End-Server kann Apache oder seinlighttpd.
In diesem Abschnitt werden einige Lösungen zum Ausführen einer CherryPy-Anwendung hinter den Webservern Apache und lighttpd vorgestellt.
cherrypy
def setup_app():
class Root:
@cherrypy.expose
def index(self):
# Return the hostname used by CherryPy and the remote
# caller IP address
return "Hello there %s from IP: %s " %
(cherrypy.request.base, cherrypy.request.remote.ip)
cherrypy.config.update({'server.socket_port': 9091,
'environment': 'production',
'log.screen': False,
'show_tracebacks': False})
cherrypy.tree.mount(Root())
if __name__ == '__main__':
setup_app()
cherrypy.server.quickstart()
cherrypy.engine.start()
SSL
SSL (Secure Sockets Layer)kann in CherryPy-basierten Anwendungen unterstützt werden. Um die SSL-Unterstützung zu aktivieren, müssen die folgenden Anforderungen erfüllt sein:
- Lassen Sie das PyOpenSSL-Paket in der Benutzerumgebung installieren
- Haben Sie ein SSL-Zertifikat und einen privaten Schlüssel auf dem Server
Erstellen eines Zertifikats und eines privaten Schlüssels
Beschäftigen wir uns mit den Anforderungen des Zertifikats und des privaten Schlüssels -
- Zunächst benötigt der Benutzer einen privaten Schlüssel -
openssl genrsa -out server.key 2048
- Dieser Schlüssel ist nicht durch ein Passwort geschützt und daher schwach geschützt.
- Der folgende Befehl wird ausgegeben:
openssl genrsa -des3 -out server.key 2048
Das Programm benötigt eine Passphrase. Wenn Sie in Ihrer OpenSSL-Version eine leere Zeichenfolge angeben können, tun Sie dies. Andernfalls geben Sie eine Standard-Passphrase ein und entfernen Sie sie wie folgt aus dem generierten Schlüssel:
openssl rsa -in server.key -out server.key
- Die Erstellung des Zertifikats erfolgt wie folgt:
openssl req -new -key server.key -out server.csr
Bei diesem Vorgang werden Sie aufgefordert, einige Details einzugeben. Dazu muss der folgende Befehl ausgegeben werden:
openssl x509 -req -days 60 -in server.csr -signkey
server.key -out server.crt
Das neu unterschriebene Zertifikat ist 60 Tage gültig.
Der folgende Code zeigt die Implementierung -
import cherrypy
import os, os.path
localDir = os.path.abspath(os.path.dirname(__file__))
CA = os.path.join(localDir, 'server.crt')
KEY = os.path.join(localDir, 'server.key')
def setup_server():
class Root:
@cherrypy.expose
def index(self):
return "Hello there!"
cherrypy.tree.mount(Root())
if __name__ == '__main__':
setup_server()
cherrypy.config.update({'server.socket_port': 8443,
'environment': 'production',
'log.screen': True,
'server.ssl_certificate': CA,
'server.ssl_private_key': KEY})
cherrypy.server.quickstart()
cherrypy.engine.start()
Der nächste Schritt ist das Starten des Servers. Wenn Sie erfolgreich sind, wird die folgende Meldung auf Ihrem Bildschirm angezeigt:
HTTP Serving HTTPS on https://localhost:8443/