2016-08-08 9 views
1

У меня есть устройство для чтения смарт-карт. Когда я пытаюсь посетить веб-сайт, который принимает сертификаты клиентов, браузер дает мне список из 2 или 3 клиентских сертификатов.фильтрация клиентских сертификатов, таких как браузер

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

Когда я пытаюсь получить доступ к этим параметрам с помощью класса X509Store в .NET, я возвращаю 256 опций. Это слишком много для того, чтобы пользователь мог разбираться!

X509Store store = new X509Store("MY", StoreLocation.CurrentUser); 
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite); 

Большинство сертификатов пользователь не должен выбрать начать с Астерикса, так что я могу легко отфильтровать 80% или около того. Например:

* .amazonaws.com * .slashdotmedia.com * .msedge.net

Мой вопрос: как я могу сузить варианты вниз до приемлемого уровня, как мой браузер (хром), но из .NET?

ответ

3

Прежде всего: открытое хранилище сертификатов, как только для чтения:

store.Open(OpenFlags.ReadOnly); 

дальше, вы должны фильтровать по application policy = client authentication:

var certs = store.Certificates.Find(X509FindType.FindByApplicationPolicy, "1.3.6.1.5.5.7.3.2", true); 

certs переменная будет хранить только действительные сертификаты (доверенных, не -рекомендованные, действительные по времени и т. д.) и которые подходят для аутентификации клиентов.

когда сделано, закрыть магазин:

store.Close();