c# - 我可以使用 C# 列出本地安装的数字证书吗?

标签 c# .net code-signing digital-certificate

我一直在努力寻找获取当前安装在本地计算机上的数字证书信息的方法——任何可以获取 X509Certificate2 集合的方法。类。

我找到了 this question其中解释了如何从 .pfx 文件中获取它。

知道如何为已安装的证书执行此操作吗?

最佳答案

作为初学者,您可以看看 this code :

using System;
using System.Security.Cryptography.X509Certificates;

namespace Encryption
   {
   class CertificateTest
      {
      static void Main()
         {
         X509Store store = new X509Store(StoreName.Root,
            StoreLocation.LocalMachine);
         store.Open(OpenFlags.ReadOnly);
         Console.WriteLine("Friendly Name\t\t\t\t\t Expiration date");
         foreach (X509Certificate2 certificate in store.Certificates)
            {
            Console.WriteLine("{0}\t{1}", certificate.FriendlyName,
               certificate.NotAfter);
            }
         store.Close();
         }
      }
   }

网上有许多更高级的示例。寻找 System.Security.Cryptography.X509Certificates 作为关键字。

以下代码列出了您自己的证书及其属性。

static void o(string s, params object[] args)
{
    Console.WriteLine(s, args);
}

static void CertList()
{
    X509Store store = new X509Store(StoreName.My,  StoreLocation.CurrentUser);
    store.Open(OpenFlags.ReadOnly);
    foreach (X509Certificate2 certificate in store.Certificates)
    {
        o("");
        o("Friendly Name: {0}", certificate.FriendlyName);
        o("Simple Name:   {0}", 
           certificate.GetNameInfo(X509NameType.SimpleName, true));
        o("Issuer:        {0}", certificate.Issuer);
        o("Expiration:    {0}", certificate.NotAfter);

        //  http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509keyusageextension.aspx
        foreach (X509Extension extension in certificate.Extensions)
        {
            o(" {0}  ({1})", extension.Oid.FriendlyName, extension.Oid.Value);

            if (extension.Oid.Value == "2.5.29.15")
            //  if (extension.Oid.FriendlyName == "Key Usage")
            {
                X509KeyUsageExtension ext = (X509KeyUsageExtension)extension;
                o("Key usages:          {0}", ext.KeyUsages);
            }
            else if (extension.Oid.Value == "2.5.29.37")
            //  if (extension.Oid.FriendlyName == "Extended Key Usage")
            {
                X509EnhancedKeyUsageExtension ext =
                                   (X509EnhancedKeyUsageExtension)extension;
                o("Extended Key usages: {0}", ext.EnhancedKeyUsages);
            }
        }
    }
    store.Close();
}

例程列出了我的系统上使用 Microsoft Office 2010 SELFCERT.EXE 创建的 VBA 安全证书。但是我无法识别这些证书的任何特殊属性/属性来过滤它们,

关于c# - 我可以使用 C# 列出本地安装的数字证书吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18144141/

相关文章:

javascript - 如何本地化 asp :TextBox's placeholder by reading App_LocalResources file (. resx)

c# - 静态哈希表应该有多少容量才能最大程度地减少冲突?

xcode - 有效的 Distribution 配置文件从 Xcode Organizer 中消失了吗?

macos - 如何在其中对 dmg 和 App 进行代码设计?

c# - 无法连接到我的 SQL Server 数据库?

C# COM 服务器到 C# COM 客户端使用 CoCreateInstance

.net - ChannelFactory 在端点上没有地址,为什么?

c# - 类似于 C# 的 jMonkey 引擎

java - 协同设计的应用程序仍然不受信任

c# - Telerik MVC Extensions Grid - 如何将网格过滤器应用于初始 LINQ 查询或传递到数据库?