我想从X509Store(StoreLocation.CurrentUser)
有没有办法做到这一点?即使通过获取所有然后按某个属性过滤以获取所有客户端身份验证证书?
我想从X509Store(StoreLocation.CurrentUser)
有没有办法做到这一点?即使通过获取所有然后按某个属性过滤以获取所有客户端身份验证证书?
有一些扩展可以帮助识别可以用作客户端证书的内容:
id-kp-clientAuth
如果存在的话。完全没有这些扩展的证书也可以用作客户端证书,只要它与(非扩展)密钥使用扩展(如果存在)兼容。您至少在(非扩展)密钥使用扩展中digitalSignature
需要的是客户端证书。如果您同时获得 Netscape Cert Type 和 Extended Key Usage 扩展,目前还不清楚会发生什么,尽管本着 RFC 5280 的精神,值得考虑将其用于与所有现有扩展兼容的目的:
如果证书同时包含密钥使用扩展和扩展密钥使用扩展,则必须独立处理这两个扩展,并且证书必须仅用于与这两个扩展一致的目的。如果没有与两个扩展一致的目的,则证书不得用于任何目的。
NSS Technical Note 3 ( All About Certificate Extensions)应该很有趣。
您需要检查每个证书的扩展。据我所知,一旦您使用了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);
}
}
}