【发布时间】:2015-01-17 02:09:13
【问题描述】:
我似乎按照文档做了所有事情,但 SSL 不起作用。
这是我的 CherryPy settings.conf:
[global]
request.show_tracebacks = False
server.socket_port = 443
server.thread_pool = 10
log.screen = True
log.error_file = '/root/website/Web.log'
log.access_file = '/root/website/Access.log'
cherrypy.server.ssl_module = 'pyopenssl'
cherrypy.server.ssl_certificate = "/etc/ssl/website/AddTrustExternalCARoot.crt"
cherrypy.server.ssl_private_key = "/etc/ssl/website/btcontract_com.key"
cherrypy.server.ssl_certificate_chain = "/etc/ssl/website/chain.crt"
如果我尝试在浏览器中加载site.com:443,它可以在不使用证书的情况下工作。
如果我尝试https://site.com,浏览器会显示 SSL 连接错误。
CherryPy 错误和连接日志根本不包含任何内容,就好像它甚至没有收到这些 https 请求一样。我不确定我的 python 是否内置了 SSL 支持,所以我安装了pyOpenSSL。这是怎么回事,我该如何解决?
【问题讨论】:
-
btcontract.com:443无疑是在做一个普通的 http 请求,因为你没有告诉浏览器使用 https。如果不通过在 url 上使用https://...协议前缀来强制协议,浏览器将使用纯 http - 仅仅因为您点击 443 不会神奇地将纯请求转换为 https。所以.. ssl 无法在您的服务器上运行。 -
@MarcB 好的,谢谢。遗憾的是,这并不能解决我的问题。
-
我在 cherrypy 前面有 nginx,它处理 https 重定向。看看这个答案...stackoverflow.com/questions/7237830/…
-
@AndrewKloos 如果 CherryPy 可以自己处理 HTTPS,为什么还要使用 nginx?
-
nginx 做了一些请求限制,处理 ssl 并提供静态内容。我最大的原因是 nginx 可以很好地处理 DOS 攻击,而不会中断非违规客户端。