【问题标题】:bottle on cherrypy server + ssl樱桃服务器上的瓶子+ ssl
【发布时间】:2012-05-10 13:55:36
【问题描述】:

我正在尝试在 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

谢谢。

【问题讨论】:

  • 您打算将 CherryPy 作为独立服务器运行还是在 Apache Httpd 或 Nginx 等 Web 服务器后面运行?

标签: python ssl cherrypy


【解决方案1】:

我没有尝试过以下方法,但希望它可以为您指明正确的方向。

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

(顺便说一句,HTTPS 的默认端口是 443,而不是 433。)

【讨论】:

    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 2012-12-07
      • 2012-07-06
      • 2011-12-06
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多