Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以列出本地安装的带有C#的数字证书吗?_C#_.net_Code Signing_Digital Certificate - Fatal编程技术网

我可以列出本地安装的带有C#的数字证书吗?

我可以列出本地安装的带有C#的数字证书吗?,c#,.net,code-signing,digital-certificate,C#,.net,Code Signing,Digital Certificate,我一直在试图找到获取当前安装在本地计算机上的数字证书信息的方法——任何允许获取类集合的方法 我能够找到解释如何从.pfx文件中获取它的方法 知道如何为已安装的证书执行此操作吗?对于我来说,此代码将打印IIS Express开发证书 var store = new X509Store(StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); var certificates = store.Certificates; foreach

我一直在试图找到获取当前安装在本地计算机上的数字证书信息的方法——任何允许获取类集合的方法

我能够找到解释如何从.pfx文件中获取它的方法


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

对于我来说,此代码将打印
IIS Express开发证书

var store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certificates = store.Certificates;
foreach (var certificate in certificates)
{
     Console.WriteLine(certificate.FriendlyName);
}
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
安全证书。但是我无法识别这些证书的任何特殊属性来过滤它们,

谢谢,Axel。这是非常接近我要找的。我应该在我原来的帖子里解释一下。我需要列出本地安装的代码签名证书,如果我这样称呼它,则Microsoft的签名工具可能会使用这些证书:
signtool sign/a MyFile.exe
我似乎无法从您发布的代码中获取该证书。我已扩展了我的答案。希望有帮助。谢谢。和我向阿克塞尔描述的一样,我也提出了同样的后续问题。它给了我一个很长的列表,但不是我自己的证书。
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();
}