Подписание данных с помощью сертификата смарт-карты не работает на платформе x64 - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть приложение, работающее в Windows, где я хочу подписать данные любым сертификатом смарт-карты.

Извините за мой английский, это не мой родной язык.Вот код, который я использую:

string heslo = "289-Black Joe";
var myStore = new X509Store();
myStore.Open(OpenFlags.ReadOnly);

foreach(X509Certificate2 cert in myStore.Certificates)
{
    if(!cert.HasPrivateKey) continue; // not smartcard for sure
    try
    {
        var rsa = cert.PrivateKey as RSACryptoServiceProvider;
        if(rsa == null) continue; // not smart card cert again
        if(rsa.CspKeyContainerInfo.HardwareDevice) // sure - smartcard
        {
            signedHash = rsa.SignHash(HashData(heslo), CryptoConfig.MapNameToOID("SHA1"));
            var pom = Encoding.Default.GetString(signedHash);
            myStore.Close();
            return;
        }
    } catch(Exception ex)
    {
        Console.WriteLine(ex);
    }
}
myStore.Close();

Код работает, когда в настройках проекта в Build-> Platform target-> Prefer 32-bit установлен флажок.При повторном прохождении сертификатов попадают в сертификат карты, он запрашивает PIN-код карты, и затем мои данные подписываются.Но когда флажок «Предпочитать 32-разрядный» снят (это то, что мне нужно), окно запроса PIN-кода пропускается, потому что не удается получить закрытый ключ сертификата.

Я не совсем уверен, почему это происходит, и яЯ также не очень знаком с работой с сертификатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...