бутылка на сервере cherrypy + 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()

но выше бросает ArgumentError, что я не могу установить свойства для объекта None (ssl_adpater). По-видимому, мне нужно установить свойство ssl_adapter для некоторого объекта, производного от SSLAdapter, но я не смог найти никаких примеров.

Я использую Python 2.7 и Cherrypy 3.2.2

спасибо.

2 ответов


попробуйте использовать следующие:

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)

Я не пробовал следующее, Но, надеюсь, это должно указать вам в правильном направлении.

WSGI обычно используется для связи между веб-сервером, таким как Apache Httpd и веб-приложением Python, где запросы обрабатываются веб-сервером и обрабатываются приложением 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.)