从C#中的证书存储中获取证书列表

时间:2009-07-30 08:48:20

标签: c# certificate x509certificate certificate-store

对于安全的应用程序,我需要在对话框中选择证书。 如何使用C#访问证书存储区或其中的一部分(例如storeLocation="Local Machine"storeName="My")并从中获取所有证书的集合?在此先感谢您的帮助。

5 个答案:

答案 0 :(得分:58)

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);

store.Open(OpenFlags.ReadOnly);

foreach (X509Certificate2 certificate in store.Certificates){
    //TODO's
}

答案 1 :(得分:16)

试试这个:

//using System.Security.Cryptography.X509Certificates;
public static X509Certificate2 selectCert(StoreName store, StoreLocation location, string windowTitle, string windowMsg)
{

    X509Certificate2 certSelected = null;
    X509Store x509Store = new X509Store(store, location);
    x509Store.Open(OpenFlags.ReadOnly);

    X509Certificate2Collection col = x509Store.Certificates;
    X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, windowTitle, windowMsg, X509SelectionFlag.SingleSelection);

    if (sel.Count > 0)
    {
        X509Certificate2Enumerator en = sel.GetEnumerator();
        en.MoveNext();
        certSelected = en.Current;
    }

    x509Store.Close();

    return certSelected;
}

答案 2 :(得分:9)

最简单的方法是打开所需的证书存储,然后使用X509Certificate2UI

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var selectedCertificate = X509Certificate2UI.SelectFromCollection(
    store.Certificates, 
    "Title", 
    "MSG", 
    X509SelectionFlag.SingleSelection);

X509Certificate2UI on MSDN中的更多信息。

答案 3 :(得分:4)

是 - X509Store.Certificates属性返回X.509证书库的快照。

答案 4 :(得分:0)

以上问题的例子。

    public List<string> getListofCertificate()
    {
        var certificates = new List<string>();
        X509Store store = new X509Store(StoreLocation.CurrentUser);
        try
        {
            store.Open(OpenFlags.ReadOnly);

            // Place all certificates in an X509Certificate2Collection object.
            X509Certificate2Collection certCollection = store.Certificates;
            foreach (X509Certificate2 x509 in certCollection)
                {
                    Console.WriteLine(x509.IssuerName.Name);
                    certificates.Add(x509.IssuerName.Name);
                }
        }
        finally
        {
            store.Close();
        }
        return certificates;

    }