Per un'applicazione protetta, è necessario selezionare un certificato in una finestra di dialogo. Come posso accedere all'archivio certificati o parte di esso (ad esempio storeLocation="Local Machine"
e storeName="My"
) utilizzando C# e ottenere una raccolta di tutti i certificati da lì? Grazie in anticipo per il vostro aiuto.Ottieni l'elenco dei certificati dall'archivio certificati in C#
risposta
Sì: la proprietà X509Store.Certificates
restituisce un'istantanea dell'archivio certificati X.509.
X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 mCert in store.Certificates){
//TODO's
}
Prova questo:
//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;
}
Linq semplifica la procedura: x509Store.Certificates.OfType
@JonathanDeMarks: cosa significa esattamente "" DC = mysite, DC = com "' significa qui? Nessuno di questi esempi sembra mostrare come ottenere un certificato _specific_ ... – Nyerguds
@Nyerguds La domanda è: ottenere l'elenco dei certificati dall'archivio certificati in C#, non specifico. Per favore, crea un'altra domanda. – Cobaia
Il modo più semplice per farlo è con l'apertura dei certificati che si desidera e quindi utilizzando X509Certificate2UI
.
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var selectedCertificate = X509Certificate2UI.SelectFromCollection(
store.Certificates,
"Title",
"MSG",
X509SelectionFlag.SingleSelection);
Ulteriori informazioni in X509Certificate2UI
on MSDN.
Per usare 'X509Certificate2UI' ho bisogno di aggiungere un riferimento a' System.security.dll', tuttavia funziona come un fascino +1 ':)'. Inoltre, per utilizzare un keystore utente, utilizzo 'StoreLocation.CurrentUser' anziché'StoreLocation.LocalMachine'. – albciff
Per eliminare la possibilità di errori di battitura dovresti usare le enumerazioni: StoreName e StoreLocation. –