【问题标题】:Get List of Certificate Store Names in C#获取 C# 中的证书存储名称列表
【发布时间】:2011-05-01 12:26:37
【问题描述】:

我可以使用以下语句在特定商店中获取证书集合。

X509Store.Certificates

但不确定如何获取当前用户或本地计算机下存在的证书存储名称列表。我还检查了 StoreName 枚举,但它只列出标准商店名称,而不是用户定义的名称。

我想要证书商店的列表,而不是特定商店中的证书列表。

【问题讨论】:

    标签: c# certificate-store


    【解决方案1】:

    http://msdn.microsoft.com/en-us/library/aa376058(VS.85).aspx

    不要认为有一种托管的 .net 方式可以做到这一点。最接近的可能是使用 .net 的注册表函数从注册表中读取商店名称?

    【讨论】:

      【解决方案2】:

      您可以从 C# 代码调用 Powershell 脚本。这是一个示例函数(您需要在项目中添加对 System.Management.Automation 程序集的引用),它返回 LocalMachine 的证书存储列表:

          private static String[] GetLocalMachineStoresNames()
          {
              List<String> names;
      
              using (RunspaceInvoke runtimeInvoke = new RunspaceInvoke())
              {
      
                  Collection<PSObject> results = runtimeInvoke.Invoke(@" cd cert:\LocalMachine; dir | % { $_.Name }");
      
                  names = new List<String>();
      
                  for (Int32 q = 0; q < results.Count; q++)
                  {
                      names.Add(results[q].BaseObject.ToString());
                  }
              }
      
              return names.ToArray();
          }
      

      【讨论】:

      • 获取商店名称的另一个好例子,但执行此操作需要 PowerShell。
      【解决方案3】:

      正如 dotalchemy 提到的,您必须从注册表中读取名称。查看以下站点的位置: https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx

      例如 CERT_SYSTEM_STORE_LOCAL_MACHINE 位于

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates

      这是获取名称/商店的方法

      using (var rootKeySystemCertificates = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\SystemCertificates", false))
      {
          foreach (var subKeyName in rootKeySystemCertificates.GetSubKeyNames())
          {
              var store = new X509Store(subKeyName, StoreLocation.LocalMachine);
              store.Open(OpenFlags.ReadOnly);
              //your part with store.Certificates...
              store.Close();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-11-02
        • 2017-03-23
        • 2020-12-07
        • 2022-06-10
        • 1970-01-01
        • 2012-06-10
        • 2014-07-07
        • 1970-01-01
        • 2014-03-07
        相关资源
        最近更新 更多