2009-02-19 5 views
49

J'ai un certificat généré via MakeCert. Je veux utiliser ce certificat pour la sécurité des messages WCF en utilisant PeerTrust. Comment puis-je installer par programme le certificat dans le magasin de certificats de l'ordinateur local "personnes de confiance" à l'aide de C# ou .NET?Comment puis-je installer un certificat dans le magasin de machines local par programme en utilisant C#?

J'ai un fichier CER, mais je peux aussi créer un fichier PFX.

+0

Btw - je connais les détails de Makecert et je fais confiance. S'il vous plaît, cherchez simplement des suggestions sur l'installation du certificat en utilisant programmatique C# ou installshield. Merci! –

+0

une idée de comment faire cela dans le programme c ?? une API dans Windows? – 2vision2

Répondre

53

Je crois que cela est correct:

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

Cela installe le certificat avec succès, mais lorsque j'ouvre l'option Gérer les clés privées pour la clé privée dans le magasin personnel, il donne l'erreur "aucune clé trouvée pour le certificat". – mit

+0

Je suppose que cette réponse est maintenant vide car X509Store n'est pas jetable. –

+0

@mit avez-vous trouvé une solution pour "aucune clé privée trouvée pour ce certificat"? – samir105

35

Ce qui suit fonctionne bien pour moi:

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

Au lieu d'installer le certificat à LocalMachine qui requiert des privilèges élevés, vous pouvez l'ajouter à « CurrentUser " (travaille pour moi).

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

Merci pour ça. Cela était préférable pour moi car cela s'exécutera dans un service auto-hébergé qui est exécuté (plusieurs instances) au moment de l'exécution. Pas moyen de fournir une invite UAC. Merci encore! – CodeWarrior

Questions connexes