¿Cómo puedo instalar un certificado en la tienda local de máquinas utilizando programáticamente c #?

Tengo un certificado generado a través de MakeCert. Quiero usar este certificado para la seguridad de mensajes WCF usando PeerTrust. ¿Cómo puedo instalar el certificado mediante progtwigción en el almacén de certificados de máquina local de “personas de confianza” utilizando c # o .NET?

Tengo un archivo CER, pero también puedo crear un PFX.

Yo creo que esto es correcto:

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

Lo siguiente funciona bien para mí:

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

En lugar de instalar el certificado en LocalMachine que requiere privilegios elevados, puede agregarlo a “CurrentUser” (funciona para mí).

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

Tuve que usar X509KeyStorageFlags. PersistKeySet | X509KeyStorageFlags. Indicadores MachineKeySet para resolver el error “Keyset no existe” que ocurrió más tarde cuando se intentó usar el certificado:

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

Gracias a este artículo: clave privada de certificado en certificado de tienda no legible