2012-04-30 5 views
10

私はCherrypyのサーバーの上でボトルを実行しようとしています。私はSSLサポートを取得したい。ボトルチェリーピーサーバー+ 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:

は、これまでのところ、私はこれを試してみました。 どうやらSSLAdapterから派生したオブジェクトにssl_adapterプロパティを設定する必要がありますが、例は見つかりませんでした。

私は、Python 2.7とCherryPyに3.2.2

感謝を使用しています。

+0

スタンドアロンサーバーとしてまたはApacheからhttpdまたはnginxのようなWebサーバーの背後CherryPyに実行することを計画していますか? – 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サーバーによって処理され、Pythonアプリケーションによって処理されるアパッチからhttpdとPython Webアプリケーションのようなウェブサーバの間の通信のために典型的です。スタンドアロンのアプリケーションが必要なので、WSGIアダプターを使用するのはかなり正しいとは言えませんが、これはthis documentに記載されています(しかしCherryPyの古いバージョンの場合)。

CherryPyの新しいバージョンは、スタンドアロンサーバーとしてcherrypy.quickstart(...)を使用します。これは、アプリケーションに適しています。

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に沿って、より次のようになります。on this pageを説明するように、私は、コンフィギュレーションを使用して、これらの線に沿って何かを示唆しています。

(ちなみに、ポート443はHTTPSではなく、433のデフォルトです)