12

Cherrypyのサーバー上でBottleを実行しようとしています。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()

しかし、上記は、Noneオブジェクト(ssl_adpater)にプロパティを設定できないArgumentErrorをスローします。どうやら私はssl_adapterプロパティをSSLAdapterから派生したオブジェクトに設定する必要がありますが、例が見つかりませんでした。

Python2.7とCherrypy3.2.2を使用しています

ありがとう。

4

2 に答える 2

11

以下を使用してみてください。

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)
于 2012-04-30T21:49:03.433 に答える
4

私は次のことを試していませんが、うまくいけば、正しい方向に向けられるはずです。

WSGIは通常、Apache Httpd などの Web サーバーと Python Web アプリケーションの間の通信用であり、要求は Web サーバーによって処理され、Python アプリケーションによって処理されます。スタンドアロン アプリケーションが必要なため、WSGI アダプターを使用するのは適切ではないように思えますが、これはこのドキュメントで言及されています(ただし、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ドキュメンテーションに沿ったものでもあります。

(ちなみに、ポート 443 は HTTPS のデフォルトであり、433 ではありません。)

于 2012-04-30T21:55:05.000 に答える