如何检索X509Store中的所有证书

Pab*_*blo 42 c# asp.net x509certificate

我使用以下代码从asp.net webapp检索我的电脑中的所有证书.证书集合是空的,我不明白为什么.

我尝试冒充我自己的用户帐户,但我也没有成功.我究竟做错了什么?

var store = new X509Store(StoreLocation.CurrentUser); //StoreLocation.LocalMachine fails too
var certificates = store.Certificates;
foreach (var certificate in certificates)
{
    var friendlyName = certificate.FriendlyName;
    Console.WriteLine(friendlyName);
}

//original problem: fetch a single certificate by its subject name
X509Certificate2 clientCertificate = CertificateUtility.GetCertificate(StoreName.My, StoreLocation.CurrentUser,  "CN=mypc.domainname"); //returns null :(
Run Code Online (Sandbox Code Playgroud)

Chr*_*ens 57

将这行代码添加到第二行,看看它是如何工作的:

store.Open(OpenFlags.ReadOnly);
Run Code Online (Sandbox Code Playgroud)

然后在底部:):

store.Close();
Run Code Online (Sandbox Code Playgroud)

  • @rickschott:很好,但由于它们是位标志,并且`OpenFlags.ReadOnly`的枚举值为0,因此将其与其他标志一起指定没有特定的效果.只要您不提供`OpenFlags.ReadWrite`(值1)标志,它将被视为只读.`OpenFlags.ReadOnly`实际上只是一个默认值,因为该函数需要一个参数.它的描述在技术上甚至都不正确,因为正如我所说,它不是一个真正的旗帜; 它没有一点要改变. (2认同)
  • 或者您可以将其包装在“using”块中,因为“X509Store”实现了“IDisposable”;) (2认同)

小智 19

一体 ...

我有一个带https的apache服务器(xamp).我通过https和c#(vs2010)访问PHP上传页面

  1. 例如,从个人文件夹证书中安装证书.

  2. 要查看证书运行"certmgr.msc",至少在win7中

列出个人证书

var store = new X509Store(StoreLocation.CurrentUser); 

store.Open(OpenFlags.ReadOnly); 

var certificates = store.Certificates;
foreach (var certificate in certificates)
{
    var friendlyName = certificate.FriendlyName;
    var xname = certificate.GetName(); //obsolete
    Console.WriteLine(friendlyName);
}

store.Close();
Run Code Online (Sandbox Code Playgroud)

查找特定证书

string certificateName = "CN=localhost"; //name found in the var xname
X509Store storex = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                    storex.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificatesx =
            storex.Certificates.Find(X509FindType.FindBySubjectName, 
            certificateName,
            true);

X509Certificate certificatex = certificates[0];

storex.Close();
Run Code Online (Sandbox Code Playgroud)