Я собираюсь реализовать веб-приложение, которое требует от клиентов аутентификации с помощью клиентских сертификатов. Веб-приложение работает за балансировщиком нагрузки, который общается с внутренними службами на none https
путь.
Я настроил свой торнадо следующим образом:
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. Мой вопрос: есть ли способ настроить работу торнадо на http?
Ваш образец фактически запускает HTTP-сервер, а не HTTPS, поскольку переменная http_server переназначена. Первый раз:
http_server = tornado.httpserver\
.HTTPServer(app, ssl_options=ssl_ctx)
вы объявляете HTTPS-сервер, а затем:
http_server = tornado.httpserver.HTTPServer(app)
вы создаете экземпляр другого сервера, на этот раз не включая SSL. Это единственный экземпляр, который активируется вызовом метода прослушивания.
Это обычная схема: пусть балансировщик нагрузки обрабатывает SSL, а HTTP - позади.