С# Web API — аутентификация пользователей по клиентскому сертификату

Мне нужно аутентифицировать потребителя нашего REST API, аутентифицируя его клиентский сертификат, и я немного не понимаю, как аутентифицировать клиента.

Достаточно ли хранить сертификат CA в моем локальном хранилище, отправлять клиенту сертификат (редактировать: по электронной почте или в какой-либо другой форме, а не через API) и прикреплять сертификат к каждому вызову API. Со своей стороны я бы проверил цепочку, затем загрузил пользователя по серийному номеру (т.е. сопоставил серийный номер с пользователем), а затем пошел оттуда?

Это полностью безопасно или мне нужно добавить какую-то другую проверку, например, имя пользователя в CN и т. д.?

Также будут ли какие-либо проблемы с безопасностью при использовании одного и того же сертификата для клиента для отправки на сервер и сервера для отправки клиенту?


person Eitan    schedule 28.01.2019    source источник
comment
Коротко: это не очень хорошая практика. Сертификат должен быть передан клиенту по другому каналу, чем сам API. Например, через доверенное лицо, которым можете быть вы, внешняя компания или отдел (и отправить по почте). Сертификат просто представляет доверенного клиента, и вы можете доверять ему только в том случае, если вы или доверенный представитель знаете его. Следовательно: также будут ли какие-либо проблемы с безопасностью при использовании одного и того же сертификата для клиента для отправки на сервер и сервера для отправки клиенту? Ответ: да.   -  person Caspar Kleijne    schedule 29.01.2019
comment
@CasparKleijne хорошо, это имеет смысл! Если я могу спросить, почему использование одного и того же сертификата для проверки клиентов на сервере, а также для шифрования трафика к клиенту может быть проблемой безопасности? Редактировать: я думаю, если я думаю об этом, я знаю. Кто-то может просто получить доступ к API в браузере, сохранить сертификат, а затем использовать его для аутентификации.   -  person Eitan    schedule 29.01.2019


Ответы (1)


Попробуйте этот замечательный пост об аутентификации клиентов с помощью сертификатов: Использование клиентских сертификатов в .NET, часть 8: работа с клиентскими сертификатами в OWIN/Katana

person Max    schedule 28.01.2019