как получить сертификат из из хранилища ОС

310
23 января 2018, 09:23

Получил задание: "Получить и проверить цифровую подпись файла, в качестве пары ключей использовать само подписанный сертификат X509 который будет располагаться в хранилище сертификатов операционной системы для доступа к хранилищу использовать X509Store." Нашел как брать сертификат из файла

try
{
X509Certificate theSigner = X509Certificate.CreateFromSignedFile ("c:\\r\\1.dll");
Console.Write("certificate info :"+ theSigner.GetCertHashString());
}
catch (Exception ex)
{
Console.WriteLine("No digital signature ");
}

а как это сделать из хранилища не знаю. Подскажите, как это сделать.

Answer 1

Для получения доступа к хранилищу вы можете использовать следующий код:

using System.Security.Cryptography.X509Certificates;
namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            //Выбираем и открываем хранилище с сертификатами
            var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            //Проходим по всем сертификатам и что то с ними делаем
            foreach (X509Certificate2 cert in store.Certificates)
            {
                //В данном участке кода будут все сертификаты из указанного хранилища
            }
            //Закрываем хранилище
            store.Close();
        }
    }
}

UPD

В связи с вполне логичным комментарием товарища @VladD дополняю кодом с использованием using. Это необходимо для обеспечения закрытия хранилища даже в случае ошибки в блоке обработки сертификатов (И банально это более лаконично).

static void Main(string[] args)
{
    //Выбираем и открываем хранилище с сертификатами
    using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
    {
        store.Open(OpenFlags.ReadOnly);
        //Проходим по всем сертификатам и что то с ними делаем
        foreach (X509Certificate2 cert in store.Certificates)
        {
            //В данном участке кода будут все сертификаты из указанног охранилища
        }
    }
}

P.S. Если вам требуется реализовать подпись по ГОСТу, то вы можете воспользоваться библиотекой GostCryptography

READ ALSO
Как выделить из текста имена? C#

Как выделить из текста имена? C#

В функцию поступает текст в виде строки (производной длины тк

329
Путь до папке в папке с проектом C#

Путь до папке в папке с проектом C#

Мне нужно узнать, как использовать папку где находится проект (если к примеру я его перемещу)Мне нужно для ListBox

327
OutAttribute и out keyword

OutAttribute и out keyword

В чём заключается разница между ключевым словом out и атрибутом Out? На сколько мне известно из документации, эти вещи эквивалентны

247
Как создавать и изменять dbf в C#

Как создавать и изменять dbf в C#

Здравствуйте, нужно открыть dbf файл, изменить его через SQL запросы и сохранить в другой файлС dbf никогда не работал, поэтому искал код в инете

645