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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline dot9889  
#1 Оставлено : 30 июня 2015 г. 11:07:43(UTC)
dot9889

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей Писарев  
#2 Оставлено : 30 июня 2015 г. 11:22:14(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2392 раз в 1881 постах
Получить список сертификатов из My и имя контейнера, с которым связан сертификат
Получить список контейнеров
Сравнить списки.
Для каждого сертификата в списке - найти промежуточные (в CA) и корневой (в ROOT)

Цель какая?
Техническую поддержку оказываем тут
Наша база знаний
Offline Максим Коллегин  
#3 Оставлено : 30 июня 2015 г. 11:22:54(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,453
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 748 раз в 643 постах
Такой PP нашим CSP не поддерживается.
Знания в базе знаний, поддержка в центре поддержки
Offline Максим Коллегин  
#4 Оставлено : 30 июня 2015 г. 11:24:22(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,453
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 748 раз в 643 постах
Решив задачу из предыдущего топика, возопите её для все контейнеров. И постройте цепочку доя каждого полученного сертификата. Руты цепочек добавьте в новое хранилище - это будет решением.
Знания в базе знаний, поддержка в центре поддержки
Offline dot9889  
#5 Оставлено : 30 июня 2015 г. 11:25:30(UTC)
dot9889

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

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

Сказал(а) «Спасибо»: 4 раз
Для каждого сертификата в списке - найти промежуточные (в CA) и корневой (в ROOT), лучше даже сразу корневой. Я знаю что не поддерживается , я использую Крипто про 3.9 но не использую КриптоПро NET поэтому решение с Gost3410CryptoServiceProvider не подходит к сожалению.

Отредактировано пользователем 30 июня 2015 г. 11:28:26(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#6 Оставлено : 30 июня 2015 г. 11:27:58(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2392 раз в 1881 постах
Автор: dot9889 Перейти к цитате
Для каждого сертификата в списке - найти промежуточные (в CA) и корневой (в ROOT), лучше даже сразу корневой. Я знаю что не поддерживается , я использую Крипто про 3.9 но не использую КриптоПро NET


Сразу, это как?

А вообще, если сертификат квалифицированный (или у Вас могут быть неквалифицированные?) - корневой один на все в РФ.
Техническую поддержку оказываем тут
Наша база знаний
Offline dot9889  
#7 Оставлено : 30 июня 2015 г. 11:29:37(UTC)
dot9889

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

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

Сказал(а) «Спасибо»: 4 раз
Корневой нашего Удостоверяющего центра. Мне нужно программно проверять нашим ли УЦ выдан ключ. Ну не сразу а так чтобы узнать вообщем что за корневой у ключа установлен.

Отредактировано пользователем 30 июня 2015 г. 11:31:52(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#8 Оставлено : 30 июня 2015 г. 11:40:15(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2392 раз в 1881 постах
Автор: dot9889 Перейти к цитате
Корневой нашего Удостоверяющего центра. Мне нужно программно проверять нашим ли УЦ выдан ключ. Ну не сразу а так чтобы узнать вообщем что за корневой у ключа установлен.


А если Я удалю Ваш корневой и поставлю кросс от "УЦ 1 ИС ГУЦ" или "УЦ 2 ИС ГУЦ"?
И как планируется проверять? По имени в CN?

Загружайте идентификаторы ключа ЦС в программу и проверяйте по нему.
Техническую поддержку оказываем тут
Наша база знаний
Offline dot9889  
#9 Оставлено : 30 июня 2015 г. 12:03:38(UTC)
dot9889

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

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

Сказал(а) «Спасибо»: 4 раз
Да по CN. так а что у каждого УЦ свой идентификатор ключа по которому можно получить что за УЦ его выпустил ?
Offline Андрей Писарев  
#10 Оставлено : 30 июня 2015 г. 12:05:53(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2392 раз в 1881 постах
Автор: dot9889 Перейти к цитате
Да по CN. так а что у каждого УЦ свой идентификатор ключа по которому можно получить что за УЦ его выпустил ?


Идентификатор ключа (субъекта\ЦС) - вычисляется от открытого ключа.
Таким образом, по нему можно определить свой это УЦ или нет, даже не строя цепочку.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dot9889 оставлено 30.06.2015(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.