像浏览器一样过滤客户端证书

mic*_*ver 1 .net c# x509certificate2 x509certificate x509

我有一个智能卡读卡器。当我尝试访问接受客户端证书的网站时,浏览器会向我提供包含 2 或 3 个客户端证书的列表。

所有这些证书选项都与我的机器上使用的卡密切相关。

当我尝试通过 .NET 中的 X509Store 类访问这些选项时,我得到了 256 个选项。对于用户来说太多了,无法分类!

X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
Run Code Online (Sandbox Code Playgroud)

大多数用户不应选择以星号开头的证书,因此我可以轻松过滤掉 80% 左右的证书。例如:

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

我的问题是:如何将选项缩小到可管理的级别,例如我的浏览器(chrome),但来自 .NET ?

Cry*_*t32 6

首先:以只读方式打开证书存储:

store.Open(OpenFlags.ReadOnly);
Run Code Online (Sandbox Code Playgroud)

接下来,您必须按以下条件进行过滤application policy = client authentication

var certs = store.Certificates.Find(X509FindType.FindByApplicationPolicy, "1.3.6.1.5.5.7.3.2", true);
Run Code Online (Sandbox Code Playgroud)

certs变量将仅存储有效的证书(受信任的、不可撤销的、时间有效的等)并且适合客户端身份验证。

完成后,关闭商店:

store.Close();
Run Code Online (Sandbox Code Playgroud)