扫描证书存储不显示所有证书

本文关键字:证书 显示 存储 扫描 | 更新日期: 2024-10-30 12:26:35

我创建了一个下面列出的 C#.Net 控制台程序来扫描所有证书存储并显示证书信息。问题是它没有显示所有证书。

例如,此命令行显示个人存储中的证书:

CERTUTIL.EXE -store My

但是,我的测试程序显示它没有个人证书。我正在使用Windows 2008 R2。 这是缩写的控制台应用程序。知道我可能做错了什么吗?我在常规CMD窗口中尝试了两者,并以管理员身份进行了相同的结果。

using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Collections;
namespace CertView
{
    class Program
    {
        static int Main(string[] args)
        {
            var stores = Enum.GetValues(typeof(StoreName));
            IEnumerator enumStores = stores.GetEnumerator();
            foreach (StoreName sn in stores)
            {
                X509Store str = new X509Store(sn.ToString());
                str.Open(OpenFlags.ReadOnly);
                int count = str.Certificates.Count;
                if (count > 0)
                {
                    Console.WriteLine("Store: " + sn.ToString() + Environment.NewLine);
                    foreach (X509Certificate2 x509 in str.Certificates)
                    {
                        Console.WriteLine("Friendly name: {0}", x509.FriendlyName);
                        Console.WriteLine("Issued to: " + x509.GetNameInfo(X509NameType.SimpleName, false));
                        Console.WriteLine("Issued by: " + x509.GetNameInfo(X509NameType.SimpleName, true));
                        Console.WriteLine("Thumbprint: " + x509.Thumbprint);
                        x509.Reset();
                    }
                }
                str.Close();
            }
        }
    }
}

扫描证书存储不显示所有证书

这是因为默认情况下certutil专注于LocalMachine商店,而X509Store专注于CurrentUser商店。阅读有关X509Store构造函数的备注部分:https://msdn.microsoft.com/en-us/library/h16bc8wd(v=vs.110).aspx

您需要在指定存储位置的位置使用不同的构造函数。例如,这个:X509Store(StoreName, StoreLocation)