2012-04-30 33 views
10

Próbuję uruchomić butelkę na serwerze Cherrypy. Chcę uzyskać wsparcie SSL.butelka na serwerze cherrypy + ssl

Do tej pory próbowałem to:

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

Ale przede zgłasza ArgumentError że nie mogę ustawić właściwości obiektu na None (ssl_adpater). Wygląda na to, że muszę ustawić właściwość ssl_adapter na obiekt pochodzący z obiektu SSLAdapter, ale nie mogłem znaleźć żadnych przykładów.

Używam Pythona 2.7 i CherryPy 3.2.2

dzięki.

+0

Planujesz uruchomić CherryPy jako serwer autonomiczny lub za serwerem WWW Apache httpd podobnego lub Nginx? – Bruno

+0

Jako samodzielny serwer – zyash

Odpowiedz

9

Spróbuj użyć następujących czynności:

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

nie próbowałem następujące, ale miejmy nadzieję, powinien wskazać we właściwym kierunku.

jest zwykle używany do komunikacji między serwerem WWW, takim jak Apache Httpd, a aplikacją internetową Python, w której żądania są obsługiwane przez serwer sieci Web i obsługiwane przez aplikację Python. Ponieważ chcesz samodzielnej aplikacji, za pomocą adaptera WSGI nie brzmi całkiem dobrze, chociaż jest to wymienione w this document (ale dla starej wersji CherryPy).

Nowsze wersje CherryPy używają cherrypy.quickstart(...) dla ich niezależnych serwerów. Brzmi bardziej odpowiedni dla twojej aplikacji. Proponuję za pomocą konfiguracji jak opisano on this page, coś wzdłuż tych linii:

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

Byłoby to również bardziej zgodne z _cserver documentation.

(Nawiasem mówiąc, port 443 jest domyślnym dla HTTPS, a nie 433.)