CherryPy - Distribuzione dell'applicazione
Questo capitolo si concentrerà maggiormente sull'applicazione basata su CherryPy SSL abilitata tramite il server HTTP CherryPy integrato.
Configurazione
Ci sono diversi livelli di impostazioni di configurazione richieste in un'applicazione web:
Web server - Impostazioni collegate al server HTTP
Engine - Impostazioni associate all'hosting del motore
Application - Applicazione che viene utilizzata dall'utente
Distribuzione
La distribuzione dell'applicazione CherryPy è considerata un metodo abbastanza semplice in cui tutti i pacchetti richiesti sono disponibili dal percorso del sistema Python. Nell'ambiente ospitato sul Web condiviso, il server Web risiederà nel front-end che consente al provider host di eseguire le azioni di filtro. Il server front-end può essere Apache olighttpd.
Questa sezione presenterà alcune soluzioni per eseguire un'applicazione CherryPy dietro i server web Apache e lighttpd.
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)può essere supportato nelle applicazioni basate su CherryPy. Per abilitare il supporto SSL, devono essere soddisfatti i seguenti requisiti:
- Avere il pacchetto PyOpenSSL installato nell'ambiente dell'utente
- Avere un certificato SSL e una chiave privata sul server
Creazione di un certificato e una chiave privata
Affrontiamo i requisiti del certificato e della chiave privata -
- Per prima cosa l'utente ha bisogno di una chiave privata -
openssl genrsa -out server.key 2048
- Questa chiave non è protetta da password e quindi ha una protezione debole.
- Verrà emesso il seguente comando:
openssl genrsa -des3 -out server.key 2048
Il programma richiederà una passphrase. Se la tua versione di OpenSSL ti consente di fornire una stringa vuota, fallo. Altrimenti, inserisci una passphrase predefinita e quindi rimuovila dalla chiave generata come segue:
openssl rsa -in server.key -out server.key
- La creazione del certificato è la seguente:
openssl req -new -key server.key -out server.csr
Questo processo ti chiederà di inserire alcuni dettagli. Per fare ciò, deve essere emesso il seguente comando:
openssl x509 -req -days 60 -in server.csr -signkey
server.key -out server.crt
Il certificato appena firmato sarà valido per 60 giorni.
Il codice seguente mostra la sua implementazione:
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()
Il passo successivo è avviare il server; se hai successo, vedrai il seguente messaggio sullo schermo:
HTTP Serving HTTPS on https://localhost:8443/