2010-11-16 11 views
10

Tengo un código C# 4.0 que intenta instalar un certificado CA (codificado en .der) en el almacén "Autoridades de certificación raíz de confianza" para el usuario actual (Mi). Mi pequeña aplicación de consola se ejecuta silenciosamente contra otras tiendas, pero para esta tienda aparece una ventana emergente de GUI "Estás a punto de instalar un certificado de una entidad de certificación ... Windows no puede validar que el certificado es realmente de ... ¿Quieres instalar este certificado?Instalación de certificados Advertencia de seguridad ¿Alternativa?

Este mensaje es un problema porque la idea es implementar automáticamente la aplicación con un MSI y obtener silenciosamente los certs correctos en el lugar correcto. Tener un cuadro modal matará la implementación automatizada.

¿Cómo se puede realizar esta instalación sin un messagebox que rompa la implementación?

+1

La razón de Windows aparece esa pregunta es que por la adición de certificados al almacén raíz tiene implicaciones de seguridad, y así que si no se haga a la ligera. No estoy seguro de si hay alguna manera de evitar la ventana emergente, ¡pero espero que no! La instalación de una aplicación no debe permitir que ** ** se comprometa la seguridad de la PC, especialmente no en forma silenciosa. – dajames

+2

@dajames Al igual que Oleg escribió en su respuesta: un administrador puede instalar certificados en la tienda raíz de confianza de las máquinas locales sin una ventana emergente. Y cuando instalas una aplicación, usualmente das los derechos de administrador del instalador, así que creo que tu situación es realmente posible. Otra razón por la que debe tener cuidado con qué instalador/aplicación le otorga sus preciosos derechos de administrador. – Stefan

Respuesta

25

Puede sonar no lógico, pero para no tener advertencia, debe agregar el certificado no al almacén de certificados raíz del usuario actual, sino a la raíz de la máquina local. Se puede verificar fácilmente que

certmgr.exe -add -c t.cer -s -r currentUser root 

producen la advertencia de seguridad, pero

certmgr.exe -add -c t.cer -s -r localMachine root 
no

.

Así que si quieres importar un certificado en .NET luego el código correspondiente podría ser de unos siguiente

using System; 
using System.Security.Cryptography.X509Certificates; 

namespace AddCertToRootStore { 
    class Program { 
     static void Main (string[] args) { 
      X509Store store = new X509Store (StoreName.Root, 
              StoreLocation.LocalMachine); 
      store.Open (OpenFlags.ReadWrite); 
      X509Certificate2Collection collection = new X509Certificate2Collection(); 
      X509Certificate2 cert = new X509Certificate2 (@"C:\Oleg\t.cer"); 
      byte[] encodedCert = cert.GetRawCertData(); 
      Console.WriteLine ("The certificate will be added to the Root..."); 
      store.Add (cert); 
      Console.WriteLine("Verify, that the certificate are added successfully"); 
      Console.ReadKey(); 
      Console.WriteLine ("The certificate will be removed from the Root"); 
      store.Remove (cert); 
      store.Close(); 
     } 
    } 
} 
+0

Acabo de probar esto en mi máquina con Windows 7. Necesitas derechos de administrador para que funcione. Creo que tiene sentido que el administrador pueda instalar certificados raíz de confianza para la máquina local sin un aviso visual. – Stefan

+0

@Stefan: por supuesto ** solo el administrador ** puede instalar ** certificados raíz en la * máquina * local *, pero especialmente la instalación de certificados en el caso debe ser a veces silenciosa. Piense en las configuraciones, por ejemplo. Así que no veo ningún problema en lo que escribiste. – Oleg

+0

Solo quería señalar (para que otras personas encuentren esta respuesta) que solo el administrador puede hacer eso, no solo cualquier usuario. Eso no estaba claro para mí inmediatamente después de leer tu respuesta. Pero, de lo contrario, +1 para la visión y el código útil muestra – Stefan

Cuestiones relacionadas