2009-07-30 14 views

Odpowiedz

4

Tak - właściwość X509Store.Certificates zwraca migawkę magazynu certyfikatów X.509.

45
X509Store store = new X509Store("My"); 

store.Open(OpenFlags.ReadOnly); 

foreach (X509Certificate2 mCert in store.Certificates){ 
    //TODO's 
} 
+9

Aby wyeliminować ewentualne błędy literówek, należy użyć wyliczeń: StoreName i StoreLocation. –

13

Spróbuj tego:

//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; 
} 
+9

Linq to ułatwia: x509Store.Certificates.OfType (). FirstOrDefault (cert => cert.IssuerName.Name.EndsWith ("DC = mysite, DC = com")); –

+0

@ JonathanDeMarks: co dokładnie oznacza "DC = mysite, DC = com" '? Żaden z tych przykładów nie wydaje się pokazywać, jak uzyskać certyfikat _specific_ ... – Nyerguds

+0

@Nyerguds Pytanie brzmi: Pobierz listę certyfikatów z magazynu certyfikatów w C#, a nie konkretne. Proszę, Utwórz kolejne pytanie. – Cobaia

7

Najprostszym sposobem na to jest poprzez otwarcie magazynu certyfikatów chcesz, a następnie za pomocą X509Certificate2UI.

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

Więcej informacji pod numerem X509Certificate2UI on MSDN.

+1

Aby użyć 'X509Certificate2UI', muszę dodać odwołanie do' System.security.dll', jednak działa to jak urok +1 ':)'. Również do korzystania z magazynu kluczy użytkownika używam 'StoreLocation.CurrentUser' zamiast 'StoreLocation.LocalMachine'. – albciff

Powiązane problemy