我正在尝试在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()
但是上面抛出了一个ArgumentError,我无法在None对象(ssl_adpater)上设置属性。 显然我需要将ssl_adapter属性设置为从SSLAdapter派生的某个对象,但我找不到任何示例。
我正在使用Python 2.7和Cherrypy 3.2.2
感谢。
答案 0 :(得分: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)
答案 1 :(得分:4)
我没有尝试过以下内容,但希望它能指出正确的方向。
WSGI通常用于Apache Httpd等Web服务器与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。)