предотвратить всплывающее окно безопасности Windows для отсутствующих смарт-карт - PullRequest
0 голосов
/ 01 октября 2018

Я нашел эту статью в Блоге Рахула о получении сертификата, связанного с установленной смарт-картой.Рахул предлагает такой подход:

var smartCardCerts = new List<X509Certificate2>();
var myStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
foreach(X509Certificate2 cert in myStore)
{
  if( !cert.HasPrivateKey ) continue; // not smartcard for sure
  var rsa = cert.PrivateKey as RSACryptoServiceProvider;
  if( rsa==null ) continue; // not smart card cert again
  if( rsa.CspKeyContainerInfo.HardwareDevice ) // sure - smartcard
  {
     // inspect rsa.CspKeyContainerInfo.KeyContainerName Property
     // or rsa.CspKeyContainerInfo.ProviderName (your smartcard provider, such as 
     // "Schlumberger Cryptographic Service Provider" for Schlumberger Cryptoflex 4K
     // card, etc
     var name = cert.Name;
     rsa.SignData(); // to confirm presence of private key - to finally authenticate
  }
}

Однако, если смарт-карта не установлена, появится диалоговое окно безопасности Windows, в котором пользователю предлагается выбрать устройство смарт-карты.

Есть ли способчтобы предотвратить появление этого всплывающего окна и вместо этого немедленно выдать исключение?

Наиболее важной для меня является эта информация:

rsa.CspKeyContainerInfo.HardwareDevice 

Кто-нибудь знает какой-либо другой способ доступа к этой информации без всплывающих диалогов, еслиотсутствует смарт-карта?

Редактировать:

Появится диалоговое окно безопасности Windows с этой строкой кода:

var rsa = cert.PrivateKey as RSACryptoServiceProvider;

1 Ответ

0 голосов
/ 18 июня 2019

Нет способа предотвратить всплывающее окно, используя этот код.Существуют и другие подходы, например, использование PCSC или Установка PIN-кода смарт-карты программно

...