Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline CyberWatcher  
#1 Оставлено : 13 апреля 2023 г. 16:04:54(UTC)
CyberWatcher

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2023(UTC)
Сообщений: 42
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 12 раз
Добрый день!

Так как столкнулся с темой работы с криптиопровайдером впермые то хочу понять, правильно ли я понимаю основные термины данной темы:

Store (хранилище сертификатов) - какой либо физический носитель где могут храниться сертификаты.
Container (контейнер) - нечто логическое в хранилище, например папка на диске где лежат сертификаты.
Сертификаты - сами файлики сертификатов с ключами.

От сюда несколько вопросов. Может ли в одном контейнере располагаться несколько сертификатов?
Может ли несколько контейнеров, располагаться в одном хранилище?

В этом коде я пытаюсь найти сертификат по отпечатку SHA1, но он ни чего не находит. До этого открываю хранилище, вроде проходит без ошибок:

Код:

 hStoreHandle = Crypto.CertOpenStore(

                  Crypto.CERT_STORE_PROV_SYSTEM,

                  0,

                  IntPtr.Zero,

                  Crypto.CERT_SYSTEM_STORE_CURRENT_USER,

                  Crypto.CERT_PERSONAL_STORE_NAME
                  //Crypto.CONTAINER

                );

                if (hStoreHandle == IntPtr.Zero)

                {

                    throw new Exception("CertOpenStore error", new Win32Exception(Marshal.GetLastWin32Error()));

                }


                // Get a pointer to the signer's certificate.

                // This certificate must have access to the signer's private key.

                pSignerCert = Crypto.CertFindCertificateInStore(

                  hStoreHandle,

                  Crypto.MY_TYPE,

                  0,

                  Crypto.CERT_FIND_SHA1_HASH,

                    //sSignerName,
                  Crypto.CERT_PERSONAL_SHA1,

                  IntPtr.Zero

                );

                if (pSignerCert == IntPtr.Zero)

                {

                    throw new Exception("CertFindCertificateInStore error", new Win32Exception(Marshal.GetLastWin32Error()));

                }



что я делаю не так?

До этого определяю ОС под которой запускается прога и импортиру либы:

Код:

[DllImport("libcades", CharSet = CharSet.Auto, SetLastError = true)]

    public static extern IntPtr CertFindCertificateInStore(

      IntPtr hCertStore,

      Int32 dwCertEncodingType,

      Int32 dwFindFlags,

      Int32 dwFindType,

      String pvFindPara,

      IntPtr pPrevCertContext

    );



И еще вопрос, можно с помощью ваших либ получить список стораджов и контейнеров?

И чем отличаются либы libcades.so и libxades.so ?

Отредактировано пользователем 13 апреля 2023 г. 16:36:37(UTC)  | Причина: дополнительные вопросы

Offline AnrDaemon  
#2 Оставлено : 13 апреля 2023 г. 21:24:51(UTC)
AnrDaemon

Статус: Участник

Группы: Участники
Зарегистрирован: 08.10.2018(UTC)
Сообщений: 17

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 1 раз в 1 постах
ЕМНИП, в хранилище может быть несколько контейнеров, но сертификаты в контейнер кладут по одному.
По крайней мере я не видел, чтобы это было как-то иначе.
thanks 1 пользователь поблагодарил AnrDaemon за этот пост.
CyberWatcher оставлено 14.04.2023(UTC)
Offline Андрей *  
#3 Оставлено : 13 апреля 2023 г. 22:34:17(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,318
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
CyberWatcher оставлено 14.04.2023(UTC)
Offline CyberWatcher  
#4 Оставлено : 14 апреля 2023 г. 12:30:58(UTC)
CyberWatcher

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2023(UTC)
Сообщений: 42
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 12 раз
Автор: Андрей * Перейти к цитате
https://github.com/CryptoPro/libcore


Спасибо. Пошел курить мануал.
Offline CyberWatcher  
#5 Оставлено : 14 апреля 2023 г. 13:23:53(UTC)
CyberWatcher

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2023(UTC)
Сообщений: 42
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 12 раз
Добрый день!
Какой командой можно посмотреть список доступных Store ?
Offline Андрей *  
#6 Оставлено : 14 апреля 2023 г. 13:27:38(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,318
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: CyberWatcher Перейти к цитате
Добрый день!
Какой командой можно посмотреть список доступных Store ?


... щелкнуть на ... StoreName.My ?
Техническую поддержку оказываем тут
Наша база знаний
Offline CyberWatcher  
#7 Оставлено : 14 апреля 2023 г. 13:41:51(UTC)
CyberWatcher

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2023(UTC)
Сообщений: 42
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 12 раз
Автор: Андрей * Перейти к цитате
Автор: CyberWatcher Перейти к цитате
Добрый день!
Какой командой можно посмотреть список доступных Store ?


... щелкнуть на ... StoreName.My ?


Да щелкнул я по нему. Я думал, что надо указывать что-то вроде \\.\HDIMAGE\ если сертификат хранится просто на диске\

вот этот код:

Код:
using System.Security.Cryptography.X509Certificates;
using LibCore;
using LibCore.Security.Cryptography.X509Certificates;

namespace CryptoProConsoleLib;

public class Program
{
    public static void Main(string[] args)
    {
        Initializer.Initialize();
        // ready to go!
        
        using (var store = new CpX509Store(StoreName.My, StoreLocation.CurrentUser))
        {
            store.Open(OpenFlags.ReadOnly);
            var cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "0x037409F20085AF8D9847DA45A4F9F40AD0", false)[0];
            Console.WriteLine("cert = " + cert.FriendlyName);
        }
    }
}


выдает вот такую огшибку

Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
at System.Security.Cryptography.X509Certificates.X509CertificateCollection.get_Item(Int32 index)
at System.Security.Cryptography.X509Certificates.X509Certificate2Collection.get_Item(Int32 index)
at CryptoProConsoleLib.Program.Main(String[] args) in /home/itpro/Projects/SelfEdu/DotNet/CryptoProLibConsole/CryptoProConsoleTests/Program.cs:line 17

Отредактировано пользователем 14 апреля 2023 г. 13:54:56(UTC)  | Причина: Не указана

Offline CyberWatcher  
#8 Оставлено : 14 апреля 2023 г. 14:08:54(UTC)
CyberWatcher

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.04.2023(UTC)
Сообщений: 42
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 12 раз
вот этот код как я полагал должен вывести список сертификатов, но ни чего не выводит

Код:
using System.Security.Cryptography.X509Certificates;
using LibCore;
using LibCore.Security.Cryptography.X509Certificates;

namespace CryptoProConsoleLib;

public class Program
{
    public static void Main(string[] args)
    {
        Initializer.Initialize();
        // ready to go!
        
        using (var store = new CpX509Store(StoreName.My, StoreLocation.CurrentUser))
        {
            store.Open(OpenFlags.ReadOnly);
            var storeCerts = store.Certificates;
            foreach (var crt in storeCerts)
            {
                Console.WriteLine("crt.FriendlyName = " + crt.FriendlyName);
            }
            var cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "0x037409F20085AF8D9847DA45A4F9F40AD0", false)[0];
            Console.WriteLine("cert = " + cert.FriendlyName);
        }
    }
}


Вывод такой:

crt.FriendlyName =
Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
at System.Security.Cryptography.X509Certificates.X509CertificateCollection.get_Item(Int32 index)
at System.Security.Cryptography.X509Certificates.X509Certificate2Collection.get_Item(Int32 index)
at CryptoProConsoleLib.Program.Main(String[] args) in /home/itpro/Projects/SelfEdu/DotNet/CryptoProLibConsole/CryptoProConsoleTests/Program.cs:line 22


Через команду certmgr -list -container '\\.\HDIMAGE\blablabla'

сертификаты выводятся

Я поэтому и спрашивал, как посмотреть список Store через команрдную строку, так как думал что можно вместо StoreName.My передать строку содержащую пусть к стораджу сертификатов.

Отредактировано пользователем 14 апреля 2023 г. 14:14:45(UTC)  | Причина: Не указана

Offline Андрей *  
#9 Оставлено : 14 апреля 2023 г. 14:33:41(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,318
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
StoreName.My - личное хранилище
StoreLocation.CurrentUser - текущего пользователя

certmgr -list -container '\\.\HDIMAGE\blablabla' - вывод списка сертификатов из указанного контейнера, это другая вообще сущность.


Итого:
а сертификат установлен в хранилище?



certmgr -list -cert -store uMy
показывает?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#10 Оставлено : 14 апреля 2023 г. 14:37:13(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,318
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
а зачем обращение к [0] ?
если нет сертификата с указанным номером - будет ошибка, что и показано выше.

Цитата:
foreach (var crt in storeCerts)
{
Console.WriteLine("crt.FriendlyName = " + crt.FriendlyName);
}
var cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "0x037409F20085AF8D9847DA45A4F9F40AD0", false)[0];
Console.WriteLine("cert = " + cert.FriendlyName);
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.