2009-02-19 12 views
49

Mam certyfikat generowany przez MakeCert. Chcę użyć tego certyfikatu do zabezpieczenia wiadomości WCF przy użyciu PeerTrust. Jak mogę programowo zainstalować certyfikat w magazynie certyfikatów komputera lokalnego zaufanych osób przy użyciu C# lub .NET?Jak można programowo zainstalować certyfikat w lokalnym magazynie urządzenia przy użyciu C#?

Mam plik CER, ale można również utworzyć PFX.

+0

Btw - znam szczegóły Makecert i zaufanie. Proszę po prostu szukać sugestii dotyczących instalacji certyfikatu za pomocą programowego C# lub installshield. dzięki! –

+0

jakikolwiek pomysł, jak to zrobić w programie c? jakiekolwiek API w oknach ?? – 2vision2

Odpowiedz

53

wierzę, że to prawda:

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

Powoduje to pomyślne zainstalowanie certyfikatu, ale po uruchomieniu opcji Zarządzaj kluczami prywatnymi dla klucza prywatnego w magazynie osobistym pojawia się błąd "brak kluczy znalezionych dla certyfikatu". – mit

+0

Sądzę, że ta odpowiedź jest teraz pusta, ponieważ X509Store nie jest jednorazowego użytku. –

+0

@mit czy znalazłeś rozwiązanie dla "nie znaleziono klucza prywatnego dla tego certyfikatu"? – samir105

35

Poniższy działa dobrze dla mnie:

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

Zamiast instalowania certyfikat LocalMachine która wymaga podwyższonych uprawnień można go dodać „CurrentUser " (pracuje dla mnie).

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

Dzięki za to. To było dla mnie lepsze, ponieważ będzie działać w usłudze hostowanej, która jest wykonywana (wiele instancji) w czasie wykonywania. Nie ma sposobu na podanie polecenia UAC. Dzięki jeszcze raz! – CodeWarrior

Powiązane problemy