2016-04-21 14 views
1

Ich habe ein unten aufgeführtes C# .Net-Konsolenprogramm erstellt, um alle Zertifikatspeicher zu durchsuchen und Zertifikatsinformationen anzuzeigen. Das Problem ist, dass nicht alle Zertifikate angezeigt werden.Scannen von Zertifikatsspeichern zeigt nicht alle Zertifikate

Zum Beispiel dieser Befehlszeile zeigt Zertifikate im persönlichen Store:

CERTUTIL.EXE -store My 

aber mein Testprogramm zeigt es wie keine persönlichen Zertifikate haben. Ich benutze Windows 2008 R2. Hier ist die abgekürzte Konsolen-App. Irgendeine Idee, was ich falsch machen könnte? Ich habe sowohl in einem regulären CMD-Fenster als auch als Administrator mit denselben Ergebnissen versucht.

using System; 
using System.Linq; 
using System.Security.Cryptography.X509Certificates; 
using System.Collections; 

namespace CertView 
{ 
    class Program 
    { 
     static int Main(string[] args) 
     { 
      var stores = Enum.GetValues(typeof(StoreName)); 
      IEnumerator enumStores = stores.GetEnumerator(); 
      foreach (StoreName sn in stores) 
      { 
       X509Store str = new X509Store(sn.ToString()); 
       str.Open(OpenFlags.ReadOnly); 
       int count = str.Certificates.Count; 
       if (count > 0) 
       { 
        Console.WriteLine("Store: " + sn.ToString() + Environment.NewLine); 
        foreach (X509Certificate2 x509 in str.Certificates) 
        { 
         Console.WriteLine("Friendly name: {0}", x509.FriendlyName); 
         Console.WriteLine("Issued to: " + x509.GetNameInfo(X509NameType.SimpleName, false)); 
         Console.WriteLine("Issued by: " + x509.GetNameInfo(X509NameType.SimpleName, true)); 
         Console.WriteLine("Thumbprint: " + x509.Thumbprint); 
         x509.Reset(); 
        } 
       } 
       str.Close(); 
      } 
     } 
    } 
} 

Antwort

2

Dies liegt daran, certutil standardmäßig auf LocalMachine Geschäft konzentriert, während X509Store auf CurrentUser Geschäft konzentriert. Lesen Sie den Abschnitt "Anmerkungen" auf X509Store Ersteller: https://msdn.microsoft.com/en-us/library/h16bc8wd(v=vs.110).aspx

Sie müssen einen anderen Konstruktor verwenden, in dem Sie den Speicherort angeben. Beispiel: X509Store (StoreName, StoreLocation)

+0

Brilliant. Vielen Dank! –

+1

@NeilWeicher Um CurrentUser \ Meine Zertifikate mit certutil aufzulisten, führen Sie den Befehl 'certutil -user- store my' – pepo

+0

Danke. Wie spezifizieren Sie explizit LocalMachine, oder ist das nur der Standard? Ich habe versucht -LocalMachine, -System und ein paar andere. –

Verwandte Themen