如何按颁发者查找证书

Fuz*_*ans 3 c# loops certificate x509certificate

我正在尝试循环遍历证书存储并确定证书是否具有特定的颁发者。我找到这篇文章,它提供了调用证书颁发者的示例:

            Console.WriteLine("{0}Issuer: {1}{0}", Environment.NewLine, x509.Issuer);
Run Code Online (Sandbox Code Playgroud)

但他们的示例似乎需要输入证书。是否可以循环遍历证书来识别计算机上是否有具有特定颁发者的证书?就像是:

ForEach(cert in x509certificate2.store)
{
    if (cert.issuer == SpecificIssuer)
    {
        console.writeline(cert.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果可以进一步将循环范围过滤到这些特定存储,我尝试隔离的证书将属于特定存储(?),例如 [控制台根\证书(本地计算机)\个人\证书]。

Cee*_*lie 7

您可以使用Certificates.Find(),使用StoreName来指定您自己的商店。

X509Store Store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
Store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection CertColl = Store.Certificates.Find(X509FindType.FindByIssuerName, "Microsoft",true);
foreach (X509Certificate2 Cert in CertColl)
    Console.WriteLine("Cert: " + Cert.IssuerName.Name);
Run Code Online (Sandbox Code Playgroud)