2009-02-19 10 views
49

Ho un certificato generato tramite MakeCert. Voglio usare questo certificato per la sicurezza dei messaggi WCF usando PeerTrust. Come posso installare il certificato a livello di codice nell'archivio certificati della macchina locale "persone fidate" utilizzando C# o .NET?Come posso installare un certificato nell'archivio della macchina locale a livello di programmazione usando C#?

Ho un file CER, ma posso anche creare un PFX.

+0

Btw - conosco i dettagli di Makecert e mi fido. Per favore, cerca solo suggerimenti sull'installazione del certificato usando programmatic C# o installshield. Grazie! –

+0

qualche idea su come farlo nel programma c ?? qualsiasi API in Windows ?? – 2vision2

risposta

53

Credo che questo è corretto:

using (X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine)) 
{ 
    store.Open(OpenFlags.ReadWrite); 
    store.Add(cert); //where cert is an X509Certificate object 
} 
+1

Questo installa il certificato con successo, ma quando si apre l'opzione Gestisci chiavi private per la chiave privata nell'archivio personale, viene restituito l'errore "Nessuna chiave trovata per certificato". – mit

+0

Suppongo che questa risposta sia vuota perché X509Store non è usa e getta. –

+0

@mit hai trovato una soluzione per "nessuna chiave privata trovata per questo certificato"? – samir105

35

le seguenti opere bene per me:

private static void InstallCertificate(string cerFileName) 
{ 
    X509Certificate2 certificate = new X509Certificate2(cerFileName); 
    X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine); 

    store.Open(OpenFlags.ReadWrite); 
    store.Add(certificate); 
    store.Close(); 
} 
6

Invece di installare il certificato al LocalMachine che richiede privilegi elevati è possibile aggiungerlo alla "CurrentUser " (per me va bene).

X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadWrite); 
store.Add(cert); //where cert is an X509Certificate object 
store.Close(); 
+0

Grazie per questo. Questo è stato preferibile per me in quanto questo sarà eseguito in un servizio self-host che viene eseguito (più istanze) in fase di esecuzione. Nessun modo per fornire prompt UAC. Grazie ancora! – CodeWarrior

Problemi correlati