CherryPy - Implementación de la aplicación

Este capítulo se centrará más en SSL de aplicaciones basadas en CherryPy habilitado a través del servidor HTTP CherryPy integrado.

Configuración

Hay diferentes niveles de ajustes de configuración necesarios en una aplicación web:

  • Web server - Configuraciones vinculadas al servidor HTTP

  • Engine - Configuraciones asociadas con el alojamiento del motor

  • Application - Aplicación que utiliza el usuario

Despliegue

La implementación de la aplicación CherryPy se considera un método bastante sencillo en el que todos los paquetes necesarios están disponibles en la ruta del sistema Python. En un entorno compartido alojado en la web, el servidor web residirá en la interfaz, lo que permite al proveedor de host realizar las acciones de filtrado. El servidor front-end puede ser Apache olighttpd.

Esta sección presentará algunas soluciones para ejecutar una aplicación CherryPy detrás de los servidores web Apache y 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)puede ser compatible con aplicaciones basadas en CherryPy. Para habilitar la compatibilidad con SSL, se deben cumplir los siguientes requisitos:

  • Tener el paquete PyOpenSSL instalado en el entorno del usuario
  • Tener un certificado SSL y una clave privada en el servidor.

Creación de un certificado y una clave privada

Tratemos con los requisitos del certificado y la clave privada -

  • Primero, el usuario necesita una clave privada:
openssl genrsa -out server.key 2048
  • Esta clave no está protegida por contraseña y, por lo tanto, tiene una protección débil.
  • Se emitirá el siguiente comando:
openssl genrsa -des3 -out server.key 2048
  • El programa requerirá una frase de contraseña. Si su versión de OpenSSL le permite proporcionar una cadena vacía, hágalo. De lo contrario, ingrese una frase de contraseña predeterminada y luego elimínela de la clave generada de la siguiente manera:

openssl rsa -in server.key -out server.key
  • La creación del certificado es la siguiente:
openssl req -new -key server.key -out server.csr
  • Este proceso le pedirá que ingrese algunos detalles. Para hacerlo, se debe emitir el siguiente comando:

openssl x509 -req -days 60 -in server.csr -signkey
server.key -out server.crt
  • El certificado recién firmado tendrá una validez de 60 días.

El siguiente código muestra su implementación:

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()

El siguiente paso es iniciar el servidor; si tiene éxito, verá el siguiente mensaje en su pantalla:

HTTP Serving HTTPS on https://localhost:8443/