Бутылка на черрижском сервере + 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
Спасибо.
Ответы
Ответ 1
Попробуйте использовать следующее:
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)
Ответ 2
Я не пробовал следующее, но, надеюсь, он должен указать вам в правильном направлении.
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.)