Лучшая практика для хранения клиентских сертификатов?

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

Теперь я пытаюсь понять, как лучше хранить эти клиентские сертификаты. Я думал, что могу хранить их в БД или в каком-то хранилище файлов/BLOB-объектов, или я узнал, что их также можно установить в хранилище на машине?

Какой из этих вариантов является идеальным или считается наилучшей практикой?

Как лучше хранить клиентские сертификаты?

Редактировать: мой сервер фактически запускает службу на компьютере с Windows с IIS, которую будут использовать другие пользователи.


person GrowinMan    schedule 05.08.2014    source источник
comment
Сертификаты являются общедоступной информацией. Их можно опубликовать как номер телефона в телефонной книге. На самом деле нет лучшей практики для их обработки. Время от времени вы сталкиваетесь с некоторыми проблемами, связанными с конфиденциальностью, например, с сервера, который передает информацию о своих пользователях на основе общедоступной информации, такой как сертификаты и файлы журналов. Но, кажется, это не применимо здесь. Соответствующий закрытый ключ (или файл PKCS 12) — это совсем другая история.   -  person jww    schedule 06.08.2014
comment
Нет ничего безопасного в том, чтобы просто иметь сертификат клиента, и для этого нет особых причин. Что вам нужно проверить, так это то, что владелец сертификата авторизован для использования вашего сервера. Для этого вам не нужны сертификаты, просто таблица subjectDN. Наличие фактического сертификата также вызывает проблемы, когда клиенту приходит время обновлять его.   -  person user207421    schedule 29.08.2014


Ответы (1)


1.) Чтобы ответить на ваш актуальный вопрос:

Вы можете хранить сертификаты X.509 в любом месте, назовем это место магазин доверия. Если он находится в вашей файловой системе, базе данных или где-то еще. Сертификаты X.509 могут быть обнародованы для всех, они не содержат конфиденциальной информации. Только открытый ключ из пары открытый/закрытый ключ хранится в сертификате X.509.

Вам просто нужно убедиться, что НИКТО ДРУГОЙ не может добавлять/удалять/изменять сертификаты в вашем доверенном хранилище. В противном случае злоумышленник сможет добавить, например, свой сертификат X.509 в ваше хранилище доверенных сертификатов, и вы сразу поверите ему.

2.) Что касается вашего замечания

I will match the client cert from the incoming request to see if it matches any of the ones already stored, and if it does, the request will be honored. 

Простого сравнения сертификатов недостаточно. Любой может отправить вам любой сертификат. Тот факт, что кто-то отправляет вам сертификат, не является доказательством того, что это лицо является владельцем закрытого ключа, соответствующего этому сертификату.

Чтобы быть уверенным, человек, который отправляет вам запрос (ваш входящий запрос), должен сгенерировать подпись, например, над входящим запросом. Если вы получаете входящий запрос вместе с подписью, вы можете использовать сертификат X.509, чтобы проверить, действительна ли подпись. Существует множество схем подписи, вам нужно решить, какую из них вы хотите использовать (некоторые из них простые, некоторые посложнее).

person Manuel    schedule 29.08.2014