Tornado 配置自签名认证

Tornado 配置自签名认证

我将实现一个需要客户端通过客户端证书进行身份验证的 Web 应用。该 Web 应用在负载均衡器后面运行,该负载均衡器会与内部服务进行通信none https

我已经对我的 Tornado 进行了如下配置:

if __name__ == "__main__":
   app = make_app()

   ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
   ssl_ctx.load_cert_chain("../server.crt", "../server.key")
   ssl_ctx.load_verify_locations("../ca.crt")
   ssl_ctx.verify_mode = ssl.CERT_REQUIRED
   http_server = tornado.httpserver\
    .HTTPServer(app, ssl_options=ssl_ctx)
   http_server = tornado.httpserver.HTTPServer(app)
   http_server.listen(3333)
   logging.info("Server is running.")
   tornado.ioloop.IOLoop.current().start()

它只能通过 https 工作。我的问题是:有没有办法配置 Tornado 在 http 上工作?

答案1

您的示例实际上启动了一个 HTTP 服务器,而不是 HTTPS 服务器,因为变量 http_server 被重新分配。第一次:

http_server = tornado.httpserver\
  .HTTPServer(app, ssl_options=ssl_ctx)

你声明一个 HTTPS 服务器,然后:

http_server = tornado.httpserver.HTTPServer(app)

您实例化另一个服务器,这次不启用 SSL。此实例是唯一通过 listen 方法调用激活的实例。

这是通常的模式:让负载均衡器处理 SSL,并在后面使用 HTTP。

相关内容