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/