2009-02-19 15 views
49

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 programación en el almacén de certificados de máquina local de "personas de confianza" utilizando C# o .NET?¿Cómo puedo instalar un certificado en la tienda local de máquinas utilizando programáticamente C#?

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

+0

Btw - conozco los detalles de Makecert y la confianza. Por favor, solo busque sugerencias para instalar el certificado usando programmatic C# o installshield. ¡Gracias! –

+0

alguna idea de cómo hacer esto en el programa c? cualquier API en Windows? – 2vision2

Respuesta

53

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 
} 
+1

Esto instala el certificado con éxito, pero cuando abro la opción Administrar claves privadas para la clave privada en la tienda personal, se obtiene el error "no se encontraron claves para el certificado". – mit

+0

Supongo que esta respuesta; ahora está vacía ya que X509Store no es desechable. –

+0

@mit ¿Encontró una solución para "no encontrar una clave privada para este certificado"? – samir105

35

las siguientes obras bueno 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(); 
} 
6

En lugar de instalar el certificado de LocalMachine que requiere privilegios elevados puede añadirlo a "CurrentUser " (funciona para mi).

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

Gracias por esto. Esto fue preferible para mí, ya que se ejecutará en un servicio alojado en sí mismo que se ejecuta (instancias múltiples) en tiempo de ejecución. No hay forma de proporcionar el aviso de UAC. ¡Gracias de nuevo! – CodeWarrior

Cuestiones relacionadas