Назад | Перейти на главную страницу

Конфигурация Tornado для аутентификации с помощью самоподписанного сертификата

Я собираюсь реализовать веб-приложение, которое требует от клиентов аутентификации с помощью клиентских сертификатов. Веб-приложение работает за балансировщиком нагрузки, который общается с внутренними службами на 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 - позади.