2012-04-30 15 views
10

Estoy tratando de ejecutar Bottle en la parte superior del servidor de Cherrypy. Quiero obtener soporte SSL.botella en el servidor de cherrypy + ssl

Hasta aquí he intentado esto:

from bottle import Bottle, route 
from cherrypy import wsgiserver 

app = Bottle() 

@app.route("/") 
def index(): 
    return "Hello" 


server = wsgiserver.CherryPyWSGIServer(
      ('0.0.0.0', 443), app) 

server.ssl_adapter.private_key = 'server.key' 
server.ssl_adapter.certificate = 'server.crt' 
server.start() 

Pero lo anterior arroja un ArgumentError que no puedo establecer las propiedades de un objeto Ninguno (ssl_adpater). Aparentemente necesito establecer la propiedad ssl_adapter en algún objeto que se derive de SSLAdapter, pero no pude encontrar ningún ejemplo.

estoy usando Python 2.7 y 3.2.2 CherryPy

Gracias.

+0

¿Tiene previsto ejecutar CherryPy como un servidor independiente o detrás de un servidor web como Apache o Nginx Httpd? – Bruno

+0

Como servidor independiente – zyash

Respuesta

9

Trate de usar la siguiente:

import web 
from web.wsgiserver import CherryPyWSGIServer 
from web.wsgiserver.ssl_builtin import BuiltinSSLAdapter 

ssl_cert = "path/to/ssl_certificate" 
ssl_key = "path/to/ssl_private_key" 

CherryPyWSGIServer.ssl_adapter = BuiltinSSLAdapter(ssl_cert, ssl_key, None) 
4

No he probado los siguientes, pero es de esperar, hay que apuntar en la dirección correcta.

WSGI es típicamente para la comunicación entre un servidor web como Apache Httpd y una aplicación web Python, donde las solicitudes son manejadas por el servidor web y manejadas por la aplicación Python. Como desea una aplicación independiente, usar un adaptador WSGI no suena del todo bien, aunque esto se menciona en this document (pero para una versión anterior de CherryPy).

Las versiones más nuevas de CherryPy usan cherrypy.quickstart(...) para sus servidores independientes. Esto suena más apropiado para su aplicación. Se recomienda usar una configuración como se describe on this page, algo a lo largo de estas líneas:

config={ 
    'server.socket_port': 443, 
    'server.ssl_module':'pyopenssl', 
    'server.ssl_certificate':'/.../host.crt', 
    'server.ssl_private_key':'/.../host.key', 
    'server.ssl_certificate_chain':'/.../ca_certs.crt' 
} 

cherrypy.config.update(config) 
cherrypy.quickstart(...) 

Esto también sería más en línea con la _cserver documentation.

(Por cierto, el puerto 443 es el valor predeterminado para HTTPS, no 433.)

Cuestiones relacionadas