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
相关产品推荐
相关产品推荐

