2

我想从X509Store(StoreLocation.CurrentUser)

有没有办法做到这一点?即使通过获取所有然后按某个属性过滤以获取所有客户端身份验证证书?

4

2 回答 2

2

有一些扩展可以帮助识别可以用作客户端证书的内容:

  • Extended Key Usage extensionid-kp-clientAuth如果存在的话。
  • “遗留” Netscape Cert Type 扩展(不是严格标准,但被广泛采用,甚至在 Netscape/Mozilla 工具的世界之外)。

完全没有这些扩展的证书也可以用作客户端证书,只要它与(非扩展)密钥使用扩展(如果存在)兼容。您至少在(非扩展)密钥使用扩展中digitalSignature需要的是客户端证书。如果您同时获得 Netscape Cert Type 和 Extended Key Usage 扩展,目前还不清楚会发生什么,尽管本着 RFC 5280 的精神,值得考虑将其用于与所有现有扩展兼容的目的:

如果证书同时包含密钥使用扩展和扩展密钥使用扩展,则必须独立处理这两个扩展,并且证书必须仅用于与这两个扩展一致的目的。如果没有与两个扩展一致的目的,则证书不得用于任何目的。

NSS Technical Note 3 ( All About Certificate Extensions)应该很有趣。

于 2010-09-23T14:36:18.720 回答
1

您需要检查每个证书的扩展。据我所知,一旦您使用了Key Usage扩展程序,您应该拥有所需的所有信息。

编辑实际上,对于客户端身份验证,您可能需要增强密钥使用扩展。我没有一个客户端身份验证证书来测试它,但以下打印了我拥有的服务器证书的“服务器身份验证”:

        var cert1 = new X509Certificate2(/* Path to certificate */);
        foreach (var ext in cert1.Extensions)
        {
            var eku = ext as X509EnhancedKeyUsageExtension;
            if (eku != null)
            {
                foreach (var oid in eku.EnhancedKeyUsages)
                {
                    Console.WriteLine(oid.FriendlyName);
                }
            }
        }
于 2010-09-22T08:38:04.423 回答