Как выполнить проверку сертификата клиента (mTLS) в Starlette / FastAPI

Я подумываю об использовании инфраструктуры FastAPI для реализации довольно простого API, но он должен поддерживать mTLS. AFAIK FastAPI основан на Starlette. Можно ли в Starlette проверить сертификат клиента?


person Fedor    schedule 07.01.2020    source источник
comment
Все возможно, но не было бы проще обрабатывать SSL на веб-сервере (nginx, apache и т. Д.) И пересылать мета-заголовки в ваше исходное приложение?   -  person Hedde van der Heide    schedule 08.01.2020
comment
@HeddevanderHeide Возможно, так и будет, но в моем случае идентификация клиента должна выполняться на основе сертификата и сертификатов, которые должны быть зарегистрированы через один и тот же API, поэтому настройка nginx-base может быть довольно сложной. На данный момент рассматриваю разные варианты. На самом деле я столкнулся с этим ajg.id.au/2018/01/01/mutual-tls-with-python-flask-and-werkzeug Решение на основе WSGI, и я подумал, что подобное можно сделать с помощью ASGI / Starlette. К сожалению, моего опыта в этой теме недостаточно, поэтому я искал подсказки от людей, знакомых с этой темой.   -  person Fedor    schedule 08.01.2020
comment
Я бы хотел, чтобы @tomchristie мог помочь с этим   -  person Fedor    schedule 10.01.2020
comment
Не могли бы вы привести пример того, как это было достигнуто, или указать мне куда-нибудь? Я изо всех сил пытаюсь найти полезную документацию по этому поводу. Спасибо.   -  person JimmyJames    schedule 08.04.2020


Ответы (1)


Нет, согласно документации Starlette, вы можете использовать HTTPSRedirectMiddleware для принудительного использования https, но проверка сертификата изначально не реализована в Starlette.

Вы можете повторно реализовать проверку сертификата самостоятельно, но это будет очень грязно ... на мой взгляд, лучше всего выполнить проверку сертификата непосредственно на веб-сервере или промежуточном программном обеспечении.

Вы можете использовать uwsgi для обрабатывать аутентификацию сертификата клиента или (повторно) реализовать свой API с помощью Flask + Gunicorn, который позволит вам выполнить проверку сертификата клиента. (например, здесь)

person A STEFANI    schedule 23.01.2020
comment
Спасибо за ответ. В итоге мы проверили сертификаты клиентов с помощью Gunicorn (сам API реализуется с помощью FastAPI и работает с uvicorn). - person Fedor; 24.01.2020