C# 如何按颁发者查找证书

C# 如何按颁发者查找证书,c#,loops,certificate,x509certificate,C#,Loops,Certificate,X509certificate,我正在尝试遍历证书存储并确定证书是否有特定的颁发者。我找到了一篇文章,其中提供了调用证书颁发者的示例: Console.WriteLine("{0}Issuer: {1}{0}", Environment.NewLine, x509.Issuer); 但他们的示例似乎需要输入证书。是否可以循环检查证书,以确定机器上是否存在具有特定颁发者的证书? 比如: ForEach(cert in x509certificate2.store) { if (cert.issu

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

            Console.WriteLine("{0}Issuer: {1}{0}", Environment.NewLine, x509.Issuer);
但他们的示例似乎需要输入证书。是否可以循环检查证书,以确定机器上是否存在具有特定颁发者的证书? 比如:

ForEach(cert in x509certificate2.store)
{
    if (cert.issuer == SpecificIssuer)
    {
        console.writeline(cert.ToString());
    }
}

我试图隔离的证书将属于特定的存储区(?),例如[Console Root\certificates(本地计算机)\Personal\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);

您可以使用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);