You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tornado(4.5.2) HTTPS证书配置报错求助

Tornado 4.5.2 + Python 3.6: SSL证书配置失败(已确认文件路径正确)

我在基于Python 3.6和Tornado 4.5.2搭建的简单测试服务器中尝试配置SSL证书,但遇到了问题。已经确认程序可以找到密钥文件和CSR文件,但运行时还是报错。以下是我的代码片段和报错信息:

import tornado.httpserver
import tornado.ioloop
import tornado.web

class indexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("hello")

application = tornado.web.Application([
    (r'/', indexHandler)
])

# 我的SSL配置代码大概是这样:
if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application, ssl_options={
        "certfile": "./server.csr",  # 这里我之前用了CSR文件
        "keyfile": "./server.key"
    })
    http_server.listen(443)
    tornado.ioloop.IOLoop.current().start()

报错堆栈:

Traceback (most recent call last):
  File "server.py", line 18, in <module>
    http_server.listen(443)
  File "/usr/local/lib/python3.6/site-packages/tornado/httpserver.py", line 208, in listen
    sockets = bind_sockets(port, address=address)
  File "/usr/local/lib/python3.6/site-packages/tornado/netutil.py", line 161, in bind_sockets
    sock.bind(sockaddr)
ssl.SSLError: [SSL: ERROR_CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)

解决方法

首先得提个关键问题:CSR文件是证书签名请求,不能直接用于SSL服务配置!你需要的是实际的证书文件(.crt/.pem格式)——要么是CA颁发的正式证书,要么是自己生成的自签名证书(测试用完全足够)。

第一步:生成自签名证书(测试用)

如果还没有可用的证书,用OpenSSL生成一套:

  • 生成私钥:
    openssl genrsa -out server.key 2048
    
  • 生成自签名证书(一步到位,不需要单独的CSR):
    openssl req -new -x509 -key server.key -out server.crt -days 365
    
    执行时会提示输入一些信息,随便填就行,测试用不影响。

第二步:修正Tornado的SSL配置

把ssl_options里的certfile改成刚生成的.crt文件,而不是CSR:

if __name__ == "__main__":
    ssl_options = {
        "certfile": "./server.crt",  # 替换成证书文件
        "keyfile": "./server.key"    # 私钥文件保持不变
    }
    http_server = tornado.httpserver.HTTPServer(application, ssl_options=ssl_options)
    http_server.listen(443)
    tornado.ioloop.IOLoop.current().start()

额外注意点

  • 私钥文件权限:确保server.key的权限是600(只有所有者可读可写),否则Tornado可能因为权限过高拒绝加载:
    chmod 600 server.key
    
  • 路径问题:如果用相对路径有疑问,换成绝对路径试试,比如/home/yourname/server.crt
  • Python 3.6兼容性:Tornado 4.5.2在Python 3.6下尽量不要手动指定ssl_version,让框架自动选择合适的协议版本,避免出现兼容性错误。

如果调整后还是报错,把完整的错误堆栈贴出来,能更精准排查问题~

内容的提问来源于stack exchange,提问作者RandallShanePhD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:27:20