我将实现一个需要客户端通过客户端证书进行身份验证的 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。