我想查找X509Store(StoreLocation.CurrentUser)
有没有这样做?即使通过某个属性进行所有过滤来获取所有客户端身份验证证书?
答案 0 :(得分:2)
有一些扩展可帮助识别可用作客户证书的内容:
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)应该是有意义的。
答案 1 :(得分:1)
您需要检查每个证书的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);
}
}
}