2012-04-30 3 views
10

Sto provando a eseguire Bottle sul server di Cherrypy. Voglio ottenere il supporto SSL.bottle on cherrypy server + ssl

Finora ho provato questo:

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

Ma quanto sopra getta un ArgumentError che non riesco a impostare le proprietà su un oggetto None (ssl_adpater). A quanto pare ho bisogno di impostare la proprietà ssl_adapter su un oggetto che deriva da SSLAdapter, ma non ho trovato alcun esempio.

Sto usando Python 2.7 e 3.2.2 CherryPy

Grazie.

+0

Avete in programma di eseguire CherryPy come un server autonomo o dietro un web server come Apache o Nginx Httpd? – Bruno

+0

Come server autonomo – zyash

risposta

9

Provare a utilizzare il seguente:

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

Non ho provato quanto segue, ma si spera, dovrebbe puntare nella giusta direzione.

WSGI è in genere per la comunicazione tra un server Web come Apache Httpd e un'applicazione Web Python, in cui le richieste vengono gestite dal server Web e gestite dall'applicazione Python. Dal momento che si desidera un'applicazione standalone, l'utilizzo di un adattatore WSGI non sembra corretto, sebbene questo sia menzionato in this document (ma per una versione precedente di CherryPy).

Le versioni più recenti di CherryPy utilizzano cherrypy.quickstart(...) per i propri server standalone. Questo sembra più appropriato per la tua applicazione. Io suggerirei di usare una configurazione come descritto on this page, qualcosa in questo senso:

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

Questo sarebbe anche più in linea con la _cserver documentation.

(A proposito, la porta 443 è l'impostazione predefinita per HTTPS, non 433.)