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

filtering client certificates like browser

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

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

当我尝试通过 .NET 中的 X509Store class 访问这些选项时,我得到了 256 个选项。太多了,用户无法整理!

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

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

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

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

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

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();