Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: дополнительные вопросы
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.10.2018(UTC) Сообщений: 17
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
ЕМНИП, в хранилище может быть несколько контейнеров, но сертификаты в контейнер кладут по одному. По крайней мере я не видел, чтобы это было как-то иначе.
|
1 пользователь поблагодарил AnrDaemon за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,297 Сказал «Спасибо»: 549 раз Поблагодарили: 2201 раз в 1717 постах
|
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2023(UTC) Сообщений: 42 Откуда: Москва Сказал(а) «Спасибо»: 12 раз
|
Автор: Андрей * https://github.com/CryptoPro/libcore Спасибо. Пошел курить мануал.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.04.2023(UTC) Сообщений: 42 Откуда: Москва Сказал(а) «Спасибо»: 12 раз
|
Добрый день! Какой командой можно посмотреть список доступных Store ?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,297 Сказал «Спасибо»: 549 раз Поблагодарили: 2201 раз в 1717 постах
|
Автор: CyberWatcher Добрый день! Какой командой можно посмотреть список доступных Store ? ... щелкнуть на ... StoreName. My ? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,297 Сказал «Спасибо»: 549 раз Поблагодарили: 2201 раз в 1717 постах
|
StoreName.My - личное хранилище StoreLocation.CurrentUser - текущего пользователя
certmgr -list -container '\\.\HDIMAGE\blablabla' - вывод списка сертификатов из указанного контейнера, это другая вообще сущность.
Итого: а сертификат установлен в хранилище?
certmgr -list -cert -store uMy показывает? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,297 Сказал «Спасибо»: 549 раз Поблагодарили: 2201 раз в 1717 постах
|
а зачем обращение к [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); |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close