2012-04-30 45 views
10

我想在Cherrypy的服務器上運行Bottle。我想獲得SSL支持。cherrypy服務器上的瓶子+ ssl

到目前爲止,我已經試過這樣:

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

但上面的拋出,我不能設置一個無對象(ssl_adpater)在性能一個ArgumentError。 顯然我需要將ssl_adapter屬性設置爲從SSLAdapter派生的某個對象,但我找不到任何示例。

我使用Python 2.7和Cherrypy 3.2.2

謝謝。

+0

你打算運行的CherryPy作爲獨立的服務器或後面,如Apache的httpd或Nginx的Web服務器? – Bruno

+0

作爲獨立服務器 – zyash

回答

9

嘗試使用以下:

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

我沒有試過以下,但希望,它應該指向你在正確的方向。

WSGI通常用於Web服務器(如Apache Httpd)和Python Web應用程序之間的通信,其中請求由Web服務器處理並由Python應用程序處理。既然你想要一個獨立的應用程序,使用WSGI適配器聽起來不太正確,雖然這在this document(但對於舊版本的CherryPy)中提到。

較新版本的CherryPy使用cherrypy.quickstart(...)作爲其獨立服務器。這聽起來更適合您的應用程序。如上所述on this page,東西沿着這些路線我會建議使用配置:

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

這也將更加符合_cserver documentation

(順便說一句,端口443是HTTPS的默認,而不是433)