Ich habe Gemalto.NET Smart Card.
Ich importierte 2 Zertifikate mit Gemalto Tools, die sconnect verwenden (die, wie ich vermute, Crypto API verwenden, um es zu tun, wenn in IE verwendet).CryptGetProvParam PP_ENUMCONTAINERS zeigt mir nur Standardzertifikat auf Smartcard
Wenn ich laufen
certutil -key -csp "Microsoft Base Smart Card Crypto Provider"
Ich habe folgendes Ergebnis
Microsoft Base Smart Card Crypto Anbieter:
7c168bc3-dc1d-A627-C218-cd45729b42cb [Default Container] AT_KEYEXCHANGEbadd537a-a377-431b-cbc9-8699dbe15e0e AT_KEYEXCHANGE
LoadKeys zurückgegeben Schlüssel existiert nicht. 0x8009000d (-2146893811) CertUtil: -Schlüsselbefehl erfolgreich abgeschlossen.
Jetzt möchte ich diese Schlüssel in meinem C# -Programm finden. Um dies zu tun, schrieb ich folgende Methode, die alle Schlüssel auf bestimmten Smartcard zurückgeben sollte.
static List<string> EnumerateContainers(string card)
{
var list = new List<string>();
var provider = IntPtr.Zero;
if (!CryptAcquireContext(ref provider, @"\\.\" + card + @"\", "Microsoft Base Smart Card Crypto Provider", 1, CspProviderFlags.UseMachineKeyStore))
Debug.WriteLine("no context for " + card);
uint bufferSize = 4096;
var container = new StringBuilder((int)bufferSize);
uint flags = CRYPT_FIRST;
while(CryptGetProvParam(provider, PP_ENUMCONTAINERS, container, ref bufferSize, flags))
{
list.Add(container.ToString());
flags = 0;
}
return list;
}
Aber meine Methode nur den Schlüssel 7c168bc3-dc1d-A627-C218-cd45729b42cb die Standardeinstellung ist finden. Was soll ich tun, um alle auf der Smartcard gespeicherten Schlüssel/Container zu finden?
später
Wie kann ich die Schlüssel löschen und neue mit dem C# importieren?