Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Получить корневые сертификаты для всех контейнеров которые у меня установлены на C#
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2015(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 4 раз
|
Здравствуйте. Скажите как получить корневые сертификаты для всех контейнеров которые у меня установлены на C# ? Мне нужно получить корневые сертификаты для всех контейнеров которые у меня установлены. Начал разбираться и нашел пока что только такой пример Цитата:public static string[] GetContainerNames() { int BUFFSIZE = 512; ArrayList containernames = new ArrayList(); uint pcbData = 0; //String provider = null; //can use null, for default provider String provider = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"; String container = null; //required for crypt_verifycontext uint type = PROV_RSA_FULL; uint cspflags = CRYPT_VERIFYCONTEXT | CSPKEYTYPE; //no private key access required. uint enumflags = PP_ENUMCONTAINERS; //specify container enumeration functdionality IntPtr hProv = IntPtr.Zero; uint dwFlags = CRYPT_FIRST;
bool gotcsp = Win32.CryptAcquireContext(ref hProv, container, provider, type, cspflags); if (!gotcsp) { showWin32Error(Marshal.GetLastWin32Error()); return null; }
StringBuilder sb = null; Win32.CryptGetProvParam(hProv, enumflags, sb, ref pcbData, dwFlags); BUFFSIZE = (int)(2 * pcbData); sb = new StringBuilder(BUFFSIZE);
/* ---------- Get KeyContainer Names ------------- */ dwFlags = CRYPT_FIRST; //required initalization while (Win32.CryptGetProvParam(hProv, enumflags, sb, ref pcbData, dwFlags)) { dwFlags = 0; //required to continue entire enumeration containernames.Add(sb.ToString()); } if (hProv != IntPtr.Zero) Win32.CryptReleaseContext(hProv, 0);
if (containernames.Count == 0) return null; else return (string[])containernames.ToArray(Type.GetType("System.String")); }
const uint PROV_RSA_FULL = 0x00000001; const uint CRYPT_VERIFYCONTEXT = 0xF0000000; static uint CSPKEYTYPE = 0; const uint PP_ENUMCONTAINERS = 0x00000002; const uint CRYPT_FIRST = 0x00000001;
const uint PP_CERTCHAIN = 0x00000009; private static void showWin32Error(int errorcode) { Win32Exception myEx = new Win32Exception(errorcode); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error code:\t 0x{0:X}", myEx.ErrorCode); Console.WriteLine("Error message:\t {0}\n", myEx.Message); Console.ForegroundColor = ConsoleColor.White; } он выведет названия всех контейнеров который у меня установлены. Я начал разбираться в этой функции и понял что мне для enumflags нужно устанавливать значение PP_CERTCHAIN но тогда мне нужно будет устанавливать указатель hProv поочередно на все контейнеры. Как это сделать ? Отредактировано пользователем 30 июня 2015 г. 11:18:10(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,173   Сказал «Спасибо»: 618 раз Поблагодарили: 2392 раз в 1881 постах
|
Получить список сертификатов из My и имя контейнера, с которым связан сертификат Получить список контейнеров Сравнить списки. Для каждого сертификата в списке - найти промежуточные (в CA) и корневой (в ROOT)
Цель какая? |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,453  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 748 раз в 643 постах
|
Такой PP нашим CSP не поддерживается. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,453  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 748 раз в 643 постах
|
Решив задачу из предыдущего топика, возопите её для все контейнеров. И постройте цепочку доя каждого полученного сертификата. Руты цепочек добавьте в новое хранилище - это будет решением. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2015(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 4 раз
|
Для каждого сертификата в списке - найти промежуточные (в CA) и корневой (в ROOT), лучше даже сразу корневой. Я знаю что не поддерживается , я использую Крипто про 3.9 но не использую КриптоПро NET поэтому решение с Gost3410CryptoServiceProvider не подходит к сожалению. Отредактировано пользователем 30 июня 2015 г. 11:28:26(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,173   Сказал «Спасибо»: 618 раз Поблагодарили: 2392 раз в 1881 постах
|
Автор: dot9889  Для каждого сертификата в списке - найти промежуточные (в CA) и корневой (в ROOT), лучше даже сразу корневой. Я знаю что не поддерживается , я использую Крипто про 3.9 но не использую КриптоПро NET Сразу, это как? А вообще, если сертификат квалифицированный (или у Вас могут быть неквалифицированные?) - корневой один на все в РФ. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2015(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 4 раз
|
Корневой нашего Удостоверяющего центра. Мне нужно программно проверять нашим ли УЦ выдан ключ. Ну не сразу а так чтобы узнать вообщем что за корневой у ключа установлен. Отредактировано пользователем 30 июня 2015 г. 11:31:52(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,173   Сказал «Спасибо»: 618 раз Поблагодарили: 2392 раз в 1881 постах
|
Автор: dot9889  Корневой нашего Удостоверяющего центра. Мне нужно программно проверять нашим ли УЦ выдан ключ. Ну не сразу а так чтобы узнать вообщем что за корневой у ключа установлен. А если Я удалю Ваш корневой и поставлю кросс от "УЦ 1 ИС ГУЦ" или "УЦ 2 ИС ГУЦ"? И как планируется проверять? По имени в CN? Загружайте идентификаторы ключа ЦС в программу и проверяйте по нему. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2015(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 4 раз
|
Да по CN. так а что у каждого УЦ свой идентификатор ключа по которому можно получить что за УЦ его выпустил ?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,173   Сказал «Спасибо»: 618 раз Поблагодарили: 2392 раз в 1881 постах
|
Автор: dot9889  Да по CN. так а что у каждого УЦ свой идентификатор ключа по которому можно получить что за УЦ его выпустил ? Идентификатор ключа (субъекта\ЦС) - вычисляется от открытого ключа. Таким образом, по нему можно определить свой это УЦ или нет, даже не строя цепочку. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
Получить корневые сертификаты для всех контейнеров которые у меня установлены на C#
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close