Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Работа с сертификатами на Rutoken S [Решено]

PreviousPage 2 of 2

Просьба ко всем. 
1. Посмотрите видео по оформлению постов. 
2. Картинки и большой текст прячьте под спойлер. 

Просто пролистайте эту тему и поймёте, что она стала нечитабельна в принципе.

Удаленный пользователь отреагировал на эту запись.
Удаленный пользователь
Цитата: Roman Anderson [anomal3] от 29.09.2020, 16:31

Выбираете сертификат ручками по пути и читаете его.

Так в том то и вопрос, как можно выбрать сертификат ручками с носителя типа Rutoken?
Это же не флешка, где я могу использовать OpenFileDialog, это именно что Rutoken.
И вопрос в том, как прочитать сертификат именно с Rutoken, а не из локального хранилища или файла *.cer из простого каталога.

Цитата: Андрей от 29.09.2020, 16:45

Просьба ко всем. 
1. Посмотрите видео по оформлению постов. 
2. Картинки и большой текст прячьте под спойлер. 

Просто пролистайте эту тему и поймёте, что она стала нечитабельна в принципе.

Добрый день, Андрей.
Прошу прощения за кажущийся беспорядок. Никогда раньше не пользовался форумами и даже не догадываюсь что такое "спойлер" и как под него прятать текст...
Обещаю разобраться на досуге.

И вопрос в том, как прочитать сертификат именно с Rutoken, а не из локального хранилища или файла *.cer из простого каталога.

Добрый вечер.
Если за последние годы ничего не поменялось, то суть таких Токенов как раз в том, что они аппаратно сделаны так, чтобы считывались только специальными утилитами. 
Когда я пользовался Рутокенами по работе, то на него можно было записать электронную подпись как вместе с открытым сертификатом, так и без него.
Если открытого сертификата на Рутокене не записано, то и читать не чего там. И да, это не флешка, хоть и похожа на нее, это совсем другой устройство. 

Если за последние годы ничего не поменялось, то суть таких Токенов как раз в том, что они аппаратно сделаны так, чтобы считывались только специальными утилитами. 
Когда я пользовался Рутокенами по работе, то на него можно было записать электронную подпись как вместе с открытым сертификатом, так и без него.
Если открытого сертификата на Рутокене не записано, то и читать не чего там. И да, это не флешка, хоть и похожа на нее, это совсем другой устройство. 

С добрым утром.

Я думаю особо ничего не поменялось, в плане хранения и защиты ЭЦП. Но появились SDK. У Рутокена они бесплатные, потому что защищать им нечего, они по сути предоставляют лишь контейнер. Так же есть КриптПро.Net. Штука уже платная (стоит конечно не дорого, что-то там около 10 баксов вроде), но даже 10 баксов не хочется тратить впустую, потому что не уверен в результате. А пообщавшись с ТП одной и другой стороны, как-то осталось очень уж много вопросов, по работе с этими SDK. Поэтому вот и прочесывают "гугл" на наличие примера решения без SDK и пример работы самой SDK, только не просто исходник класса, а именно живой пример, чтобы понять как это вообще работает. А иначе я бы просто купил готовую библиотеку с ТП и не парился бы) Но это не наш метод) хочется всё же разобраться, а не просто копипастить, даже не понимая сути. А в моем случае, так вообще, то что я взял из SDK на ГОСТ-2001 отказывается работать даже сам шаблон поиска, то есть именно тот момент, когда мне надо четко сказать: "хочу искать сертификат вот тут" (то есть на устройстве Rutoken S).
Как-то так в общем...
Ладно, в любом случае спасибо всем за помощь. Буду даже изучать забугорные гуглы)

В общем разобрался.
Для работы (в моем случае с Rutoken S с ГОСТ-2001), надо использовать sdk от КриптоПро. если хотим читать прямо с носителя, например вот так:

Спойлер

CspParameters csp = new CspParameters();
                    csp.ProviderType = 75;
                    csp.KeyContainerName = Gost3410CryptoServiceProvider.SelectContainer(true, false, IntPtr.Zero);
                    Gost3410CryptoServiceProvider gost = new Gost3410CryptoServiceProvider(csp);

Если же хотим читать просто сертификат из локального хранилища, то вообще не обязательно никаких SDK производителей, достаточно использовать стандартный X509, например вот так:

Спойлер

X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Выбор сертификата", "Выбирите сертификат, который необходимо прочитать ", X509SelectionFlag.MultiSelection);

                foreach (X509Certificate2 x509 in scollection)
                {
                    try
                    {
                        Console.WriteLine("Friendly Name: {0}{1}", x509.FriendlyName, Environment.NewLine); //показывает всякое необходимое
                        Console.WriteLine("Simple Name: {0}{1}", x509.GetNameInfo(X509NameType.SimpleName, true), Environment.NewLine);
                        
                        X509Certificate2UI.DisplayCertificate(x509); //показывает сертификат перед прочтением
                        x509.Reset();
                    }
                    catch (CryptographicException ex)
                    {
                        //бла-бла-бла
                    }

Собственно вот и все. Вдруг кому-то пригодится...

зы
научился пользоваться спойлерами))

admin отреагировал на эту запись.
admin
PreviousPage 2 of 2