2009-02-19 6 views
49

Ich habe ein Zertifikat über MakeCert generiert. Ich möchte dieses Zertifikat für die WCF-Nachrichtensicherheit mit PeerTrust verwenden. Wie kann ich das Zertifikat programmatisch in den Zertifikatsspeicher für "vertrauenswürdige Personen" auf der lokalen Maschine mithilfe von C# oder .NET installieren?Wie kann ich ein Zertifikat in dem lokalen Computerspeicher programmgesteuert mithilfe von C# installieren?

Ich habe eine CER-Datei, kann aber auch eine PFX erstellen.

+0

Btw - ich kenne die Details von Makecert und vertrauen. Bitte suchen Sie nur nach Vorschlägen zur Installation des Zertifikats mit Programmatic C# oder installshield. Vielen Dank! –

+0

irgendeine idee wie man das in c programm macht ?? jede API in Windows ?? – 2vision2

Antwort

53

Ich glaube, dass dies richtig ist:

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

Das Zertifikat wird erfolgreich installiert. Wenn ich jedoch die Option "Private Schlüssel verwalten" für den privaten Schlüssel im persönlichen Speicher öffne, wird der Fehler "Keine Schlüssel gefunden für Zertifikat" angezeigt. – mit

+0

Ich denke diese Antwort; s jetzt ungültig, da X509Store nicht verfügbar ist. –

+0

@mit hast du eine Lösung gefunden für "kein privater Schlüssel für dieses Zertifikat gefunden"? – samir105

35

Die folgende für mich gut funktioniert:

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

Statt das Zertifikat Localmachine zu installieren, die Sie erhöhte Rechte erfordert es hinzufügen können, um „Current " (funktioniert bei mir).

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

Danke dafür. Dies war für mich vorzuziehen, da dies in einem selbst gehosteten Dienst ausgeführt wird, der zur Laufzeit ausgeführt wird (mehrere Instanzen). Keine Möglichkeit zur Eingabe der UAC-Eingabeaufforderung. Danke noch einmal! – CodeWarrior