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