web-dev-qa-db-fra.com

Comment puis-je installer un certificat dans le magasin de machines local par programmation à l'aide de c #?

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

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

53
J Davis

Je pense que c'est correct:

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

Ce qui suit me convient:

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();
}
38

Au lieu d'installer le certificat sur LocalMachine qui nécessite des privilèges élevés, vous pouvez l'ajouter à "CurrentUser" (fonctionne 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();
7
user1799563

J'ai dû utiliser X509KeyStorageFlags. PersistKeySet | X509KeyStorageFlags. Indicateurs MachineKeySet pour résoudre "Le jeu de clés n'existe pas" erreur qui s'est produite plus tard lors de la tentative d'utilisation du certificat:

X509Certificate2 certificate = new X509Certificate2(pfxPath, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
     store.Open(OpenFlags.ReadWrite);
     store.Add(certificate);
     store.Close();
}

Merci à cet article: La clé privée du certificat dans le magasin de certificats n'est pas lisible

1
Dmitry