C#

2009-07-30 4 views
26

sertifika deposundan sertifikaların listesini alın Güvenli bir uygulama için bir iletişim kutusunda bir sertifika seçmem gerekiyor. C# kullanarak sertifika deposuna veya bir parçasına (ör. storeLocation="Local Machine" ve storeName="My") nasıl erişebilirim ve oradan tüm sertifikaların bir koleksiyonunu alabilir miyim? Yardımlarınız için şimdiden teşekkür ederiz.C#

cevap

4

Evet - X509Store.Certificates özelliği, X.509 sertifika deposunun bir anlık görüntüsünü döndürür.

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

store.Open(OpenFlags.ReadOnly); 

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

Yazım hatası sorunları olasılığını ortadan kaldırmak için numaralandırmalarını kullanmalısınız: StoreName ve StoreLocation. –

13

bu deneyin:

//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 bunu daha kolay yapar: x509Store.Certificates.OfType (). FirstOrDefault (cert => cert.IssuerName.Name.EndsWith ("DC = mysite, DC = com")); –

+0

@JonathanDeMarks: "DC = mysite, DC = com" ifadesi tam olarak ne anlama geliyor? Bu örneklerden hiçbiri _specific_ sertifikasının nasıl alınacağını göstermiyor ... – Nyerguds

+0

@Nyerguds Soru şu: Sertifika deposundan C# cinsinden sertifika listesini alın, belirli değil. Lütfen başka bir soru oluşturun. – Cobaia

7

o yapmanın en kolay yolu, istediğiniz sertifika mağaza açarak ve sonra X509Certificate2UI kullanmaktır. X509Certificate2UI on MSDN yılında

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

daha fazla bilgi.

+1

'X509Certificate2UI' kullanmak için' System.security.dll' öğesine bir başvuru eklemem gerekir, ancak bu, +1 ':)' bir çekicilik gibi çalışır. Ayrıca bir kullanıcı anahtar deposu kullanmak için 'StoreLocation.LocalMachine' yerine' StoreLocation.CurrentUser 'kullanın. – albciff