logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vnsuzdalev  
#1 Оставлено : 6 июля 2009 г. 21:49:19(UTC)
vnsuzdalev

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

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

Добрый день!
Подскажите, пожалуйста, существует ли способ выполнить перечисление контейнеров ключевых пар определенного криптопровайдера. Если конкретно, то меня интересует КриптоПро. Я пишу на C#.
Замысел такой. Хочется сделать более удобным интерфейс настроек для пользователя. Если перечислить все контейнеры так, чтоб пользователь видел их имена, а я получал бы их полные имена. Тогда пользователь мог бы выбрать по имени контейнер с ключами, а я бы привязал его к "процессу".
Offline Челпанов А.  
#2 Оставлено : 6 июля 2009 г. 22:16:15(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Простого способа нет. Вариантов обхода несколько.
1. Вариант, который ближе к Microsoft - отталкиваться от сертификатов, а не от контейнеров. Выдавать окно не с именами контейнеров, а с именами сертификатов из хранилища MY. А если необходим секретный ключ, то добираться к нему через X509Certificate2.PrivateKey. Если же есть необходимость добраться до имени контейнера, то действовать как-то так:
Код:
AsymmetricAlgorithm asym = x509.PrivateKey;
ICspAsymmetricAlgorithm iasym = asym as ICspAsymmetricAlgorithm;
CspKeyContainerInfo info = iasym.CspKeyContainerInfo;
Console.WriteLine("Имя контейнера:"+info.KeyContainerName);

Отсеивать же сертификаты КриптоПро можно по алгоритму ключа x509.GetKeyAlgorithm() == 1.2.643.2.2.19
2. Действовать через P/Invoke, через CryptGetProvParam( PP_ENUMCONTAINERS )
С уважением, Александр.
Offline vnsuzdalev  
#3 Оставлено : 7 июля 2009 г. 22:42:34(UTC)
vnsuzdalev

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

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

Спасибо за совет. Второй способ попробую. А вот насчет первого. Подскажите, я наверное что-то недопонимаю. Я генерирую ключевую пару на считывателе, запрашиваю сертификат, получаю его (ЦС от Microsoft). Все это отдаю на клиентскую машину. (Физически переношу считыватель и сертификат) и у клиента пытаюсь связать сертификат с ключами. Для этого мне надо выбрать контейнер( вот здесь я и хочу список всех сонтейнеров привести), а дальше получаю AsymmetricAlgorithm из него и присваиваю его x509.PrivateKey.
Может есть более удобный путь?
Offline Челпанов А.  
#4 Оставлено : 8 июля 2009 г. 17:22:20(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Все правильно, только небольшое дополнение к "...из него и присваиваю его x509.PrivateKey." и сохраняете в хранилище MY.
Все описанное Вами обычно проделывается один раз при переносе на другую машину (обычно раз в год) и это можно сделать при помощи контрольной панели КриптоПро CSP (есть и другие способы...). В дальнейшем (после установки сертификата в хранилище со связкой с секретным ключем) можно выдавать уже только окно выбора сертификата и от него плясать на секретный ключ.

Если же речь именно об установки сертификата из контейнера в хранилище MY, то только P/Invoke.
А интересно именно перечисление контейнеров или окно выбора контейнера (такое как в контрольной панели на кнопке Browse)?
С уважением, Александр.
Offline vnsuzdalev  
#5 Оставлено : 10 июля 2009 г. 3:00:07(UTC)
vnsuzdalev

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

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

Челпанов А. написал:

А интересно именно перечисление контейнеров или окно выбора контейнера (такое как в контрольной панели на кнопке Browse)?


Окно выбора - отличная вещь. А есть такая возможность его вызывать и получать из него выбор?
Online Максим Коллегин  
#6 Оставлено : 10 июля 2009 г. 5:54:31(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 536 раз в 486 постах
PP_SELECT_CONTAINER
Знания в базе знаний, поддержка в техподдержке
Offline Челпанов А.  
#7 Оставлено : 10 июля 2009 г. 18:39:33(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Убедили...
Gost3410CryptoServiceProvider.SelectContainer(...) - выдает окно выбора контейнера
Gost3410CryptoServiceProvider.ContainerCertificate{ get; set } - получение/установка из/в контейнер
simple.zip\Certificate\InstallMy.cs - пример установки сертификата из контейнера с установкой ссылки на секретный ключ.
---
Версию выложим на следующей неделе.
С уважением, Александр.
Offline Челпанов А.  
#8 Оставлено : 16 июля 2009 г. 18:48:39(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Новая версия 1.0.3484.0, выложена и содержит описанные выше изменения.
Пример в SDK включен.
Вопрос исчерпан, тема закрыта. Angel
С уважением, Александр.
Offline Челпанов А.  
#9 Оставлено : 29 апреля 2011 г. 15:59:26(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Функция SelectContainer при fqcn=true имеет особенность при функционировании с CSP 2.0 и CSP 3.0
см тему на форуме
С уважением, Александр.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.