我在我的个人证书存储中安装了两个 x509Certificates,并希望通过应用程序策略检索证书。
我使用以下代码来实现这一点:
public X509Certificate2 LocateCertificate(Oid oid)
{
var store = new X509Store(Store.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
try
{
var certificates = store.Certificates.Find(X509FindType.FindByApplicationPolicy, oid.Value, true);
if(certificates.Count != 1)
{
throw new CryptographicException(string.Format("Expected one certificate, found {0}", certificates.Count);
}
return certificates[0];
}
finally
{
store.Close();
}
}
当两个安装的 X509Certificates 具有不同的扩展密钥用法值时,上述方法在提供有效 OID 时成功检索正确的证书。但是,如果一个证书没有设置其扩展密钥使用属性,则查询也会返回它以及正确的证书。我想防止退回具有以下内容的证书:
- 不正确的扩展密钥用法值集。
- 未设置扩展密钥使用值。
任何帮助都将不胜感激。