2010-11-16 11 views
10

Ich habe einen C# 4.0-Code, der versucht, ein CA-Zertifikat (.der-codiert) in den Speicher "Vertrauenswürdige Stammzertifizierungsstellen" für den aktuellen (Mein) Benutzer zu installieren. Meine kleine Konsolen-App läuft stillschweigend gegen andere Speicher, aber für diesen Speicher erscheint ein GUI-Popup. "Sie sind dabei, ein Zertifikat von einer Zertifizierungsstelle zu installieren ... Windows kann nicht bestätigen, dass das Zertifikat tatsächlich von ... stammt Möchten Sie dieses Zertifikat installieren? "Zertifikat installieren Sicherheitswarnung Problemumgehung?

Diese Nachricht ist ein Problem, weil die Idee darin besteht, die App automatisch mit einem MSI zu implementieren und still die richtigen Zertifikate an der richtigen Stelle zu bekommen. Wenn Sie eine modale Box verwenden, wird die automatisierte Bereitstellung abgebrochen.

Wie kann diese Installation ohne ein Deployment-Breaking-Message-Box durchgeführt werden?

+1

Der Grund Windows-springt diese Frage werden könnte, ist, dass Zertifikate dem Stammspeicher hat Auswirkungen auf die Sicherheit geben, und so sollten nicht leichtfertig gemacht werden. Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, das Popup zu vermeiden, aber ich hoffe nicht! Die Installation einer Anwendung sollte ** nicht ** die Sicherheit des PCs beeinträchtigen - insbesondere nicht lautlos. – dajames

+2

@dajames Wie Oleg in seiner Antwort geschrieben hat: Ein Administrator darf Zertifikate im lokalen Computer vertrauenswürdigen Stammspeicher ohne ein Popup installieren. Und wenn Sie eine Anwendung installieren, geben Sie dem Installateur normalerweise Administratorrechte, also denke ich, dass Ihr Szenario tatsächlich möglich ist. Ein weiterer Grund, warum Sie vorsichtig sein sollten, welchen Installer/Anwendung Sie Ihre wertvollen Admin-Rechte geben. – Stefan

Antwort

25

Es kann nicht logisch klingen, aber um keine Warnung zu haben, sollten Sie das Zertifikat nicht zum Stammzertifikatsspeicher des aktuellen Benutzers hinzufügen, sondern stattdessen zum Stamm des lokalen Rechners. Sie können leicht überprüfen, ob

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

die Sicherheitswarnung zu produzieren, aber

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

nicht.

Also, wenn Sie ein Zertifikat in .NET importieren wollen, dann der entsprechende Code über folgende

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

Ich habe das gerade auf meinem Windows 7-Rechner versucht. Sie benötigen Administratorrechte, damit das funktioniert. Ich denke, dass es sinnvoll ist, dass der Administrator vertrauenswürdige Stammzertifikate für den lokalen Computer ohne eine visuelle Eingabeaufforderung installieren kann. – Stefan

+0

@Stefan: Natürlich ** nur Administrator ** kann ** Root-Zertifikate in der * lokalen * Maschine ** installieren, aber vor allem die Installation von Zertifikaten in dem Fall muss manchmal still sein. Denken Sie zum Beispiel an die Setups. Also sehe ich kein Problem in dem, was du geschrieben hast. – Oleg

+0

Ich wollte nur darauf hinweisen (für andere Leute, die auf diese Antwort stolpern), dass nur der Administrator das tun kann, nicht nur irgendein Benutzer. Das war mir nach dem Lesen Ihrer Antwort nicht sofort klar. Aber sonst +1 für die Einsicht und das nützliche Codebeispiel – Stefan

Verwandte Themen