У меня есть смарт-карта Gemalto.NET.
Я импортировал в нее 2 сертификата с помощью инструментов Gemalto, которые используют sconnect (который, как я подозреваю, использует Crypto API для этого при использовании в IE).
Когда я бегу
certutil -key -csp "Microsoft Base Smart Card Crypto Provider"
У меня есть следующий результат
Базовый криптопровайдер смарт-карт Microsoft:
7c168bc3-dc1d-a627-c218-cd45729b42cb [Контейнер по умолчанию] AT_KEYEXCHANGEbadd537a-a377-431b-cbc9-8699dbe15e0e AT_KEYEXCHANGE
LoadKeys вернул Ключ не существует. 0x8009000d (-2146893811) CertUtil: команда -key выполнена успешно.
Теперь я хочу найти эти ключи в своей программе на С#. Для этого я написал следующий метод, который должен возвращать все ключи на конкретной смарт-карте.
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;
}
Но мой метод находит только ключ 7c168bc3-dc1d-a627-c218-cd45729b42cb, который является ключом по умолчанию. Что нужно сделать, чтобы найти все ключи/контейнеры, хранящиеся на смарт-карте??
И позже
Как я могу удалить эти ключи и импортировать новый с помощью C#?