按应用程序策略OID查找证书

时间:2012-06-25 13:30:47

标签: c# .net security x509certificate2

我的个人证书存储区中安装了两个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时成功检索到正确的证书。但是,如果一个证书没有设置其扩展密钥用法属性,则查询也会返回该证书以及正确的证书。我想防止返回证书:

  1. 设置了不正确的扩展密钥用法值。
  2. 未设置扩展密钥用法值。
  3. 任何帮助都会得到满足。

0 个答案:

没有答案