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/