Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.06.2009(UTC) Сообщений: 89 Откуда: Уфа, РРЦ "АйТи"
|
Подскажите пожалуйста :
1) Как получить список всех установленных считывателей 2) Как получить список всех крипто-контейнеров на каждый из считывателей 3) Как найти среди них именно тот с которым связан некий сертификат сертификат (в случае подписания документа)
p.s. Поправьте если где - то сказал глупость.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
1) Только native способом через CryptGetProvParam PP_ENUMREADERS 114 2) Только native способом перечислить все контейнеры (PP_ENUMCONTAINERS) с флагом CRYPT_FQCN (0x10). В FQCN имени будет имя считывателя. 3) Переформулирую вопрос... Как по сертификату найти секретный ключ ему соответствующий? Если через Sharpei, то есть пример в Simple.zip (Certificate\cs\FindMy). Если на native уровне, то CryptAcquireCertificatePrivateKey. Если хочется отсеить по считывателям: CryptGetProvParam PP_FQCN (111)
P.S. Зачем так сложно? Основной способ выдать стандартное диалоговое окно со списком сертификатов в хранилище MY (они обычно имеют привязку к секретному ключу) и по нему получается секретный ключ. |
С уважением, Александр. |
1 пользователь поблагодарил Челпанов А. за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.07.2009(UTC) Сообщений: 7 Откуда: Саратов
|
Челпанов А. написал:Если через Sharpei, то есть пример в Simple.zip (Certificate\cs\FindMy). Насколько я понял, в примере рассмотрен случай, когда сертификат установлен в хранилище и имеет привязку к закрытому ключу. На мой взгляд, гораздо реальнее и ближе к жизни ситуация, когда есть файл сертификата (не установленный в хранилище и не связанный с контейнером) и контейнер закрытого ключа, и необходимо установить сертификат в соответствующий ему контейнер. Возможно ли в этом случае через Sharpei найти контейнер соответствующий конкретному сертификату?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,395 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 718 раз в 622 постах
|
Странная ситуация. Только причем тут Шарпей? Перебрать все контейнеры и выбрать с совпадающим открытым ключем - Шарпей тут явно не нужен - p\invoke достаточно. Да и для ключа в контейнере может быть несколько сертификатов. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.07.2009(UTC) Сообщений: 7 Откуда: Саратов
|
maxdm написал:Только причем тут Шарпей? При работе с .net, было бы удобно совершать подобные операции через Шарпей. maxdm написал:Шарпей тут явно не нужен - p\invoke достаточно. Странный ответ. Было бы здорово, если бы вы написали: "P\invoke тут явно не нужен - достаточно Шарпей". P\invoke достаточно для всего, возникает вопрос зачем нужен Шарпей?! maxdm написал:Странная ситуация. Что странного в ситуации?! Идея такая: у клиента есть контейнер закрытого ключа, мы ему передаем сертификат, автоматически находим соответствующий сертификату контейнер и устанавливаем в него сертификат.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
по поводу Цитата:Идея такая: у клиента есть контейнер закрытого ключа, мы ему передаем сертификат, автоматически находим соответствующий сертификату контейнер и устанавливаем в него сертификат. Рекомендую почитать предыдущую темуGost3410CryptoServiceProvider.SelectContainer(...) - выдает окно выбора контейнера Gost3410CryptoServiceProvider.ContainerCertificate{ get; set } - получение/установка из/в контейнер simple.zip\Certificate\InstallMy.cs - пример установки сертификата из контейнера с установкой ссылки на секретный ключ. Вроде этого должно хватить... |
С уважением, Александр. |
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.07.2009(UTC) Сообщений: 7 Откуда: Саратов
|
Челпанов А. написал:Рекомендую почитать предыдущую тему Gost3410CryptoServiceProvider.SelectContainer(...) - выдает окно выбора контейнера Gost3410CryptoServiceProvider.ContainerCertificate{ get; set } - получение/установка из/в контейнер simple.zip\Certificate\InstallMy.cs - пример установки сертификата из контейнера с установкой ссылки на секретный ключ.
Вроде этого должно хватить...
Да, я читал эту тему, ознакомился с рекоммендациями, которые вы дали, и с изменениями, которые внесли в Шарпей. Хотелось автоматизировать процесс, чтобы упростить жизнь неопытному пользователю, чтобы ему не надо было даже выбирать контейнер. Задача решена с использованием p\invoke, просто интересовался, можно ли это сделать через Шарпей.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Пока нельзя... Пока я не совсем понимаю, как наличие функции перечисления считывателей сможет упростить процесс установки сертификата в контейнер. Каким образом идет поиск соответствующего сертификату контейнера? Перебором? Храните доп. информацию? Какую? Где? Если действительно упростит жизнь многим, так можно и протащить в Sharpei... |
С уважением, Александр. |
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.07.2009(UTC) Сообщений: 7 Откуда: Саратов
|
Челпанов А. написал:как наличие функции перечисления считывателей сможет упростить процесс установки сертификата в контейнер Основная цель не перечислить контейнеры, а установить сертификат. Просто функция перечисления контейнеров и считывателей, на мой взгляд, помогла бы сделать более удобный API. Пример: Код:[Flags]
public enum Readers
{
Registry,
Floppy
// Другие считыватели
}
public sealed class Gost3410CryptoServiceProvider
{
// Возвращает все контейнеры на указанных считывателях
public static string[] GetContainers( Readers readers );
// Возвращает все контейнеры на всех носителях,
// у которых открытый ключ совпадает с открытым ключем сертификата.
public static string[] GetContainers( X509Certificate2 certificate );
// Возвращает все контейнеры на указанных считывателях,
// у которых открытый ключ совпадает с открытым ключем сертификата.
public static string[] GetContainers( X509Certificate2 certificate, Readers readers );
...
}
Я использую только имена контейнеров, но возможно пригодились бы перегруженные функции возвращающие экземпляры CspParameters. По поводу самой установки. Последовательность моих действий: 1. Получаю список всех контейнеров на всех носителях. 2. Перебираю все контейнеры. Если открытый ключ сертификата и контейнера совпадает, устанавливаю в контейнер сертификат. Челпанов А. написал:Храните доп. информацию? Какую? Где? Никакой доп. информации не использую. Не понимаю о какой информации идет речь и зачем она нужна, но раз вы спрашиваете, возможно я что-то не так делаю?! Единственное, на мой взгляд, негативное последствие, такого способа установки сертификата, в том что, если у нас есть несколько экземпляров контейнера на нескольких носителях, то сертификат устанавливается во все. Но в подавляющем большинстве наших случаев, существует лишь один экземпляр контейнера, и, в принципе, я не вижу ничего страшного, если сертификат будет установлен во все контейнеры (опять же в нашем случае). Я не специалист в криптографии, поэтому, если я где-то допускаю ошибки, поправьте пожалуйста. Отредактировано пользователем 30 июля 2009 г. 4:19:21(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Проблема кроется в Цитата:2. Перебираю все контейнеры. Если открытый ключ сертификата и контейнера совпадает, устанавливаю в контейнер сертификат.
Для того, чтобы получить открытый ключ (и соответственно проверить соответствует ли ключ сертификату), нужен пароль на контейнер (или pin на носитель...). Поэтому тупой перебор не поможет, не будите же вы спрашивать пароли на все контейнеры? Если же генерация запроса на сертификат идет Вашими средствами, то можно просто где-то хранить информацию о имени контейнера, тогда и перечисление контейнеров не потребуется. P.S. Цитата: я не вижу ничего страшного, если сертификат будет установлен во все контейнеры (опять же в нашем случае). Ничего страшного нет, вот только привязка от сертификата на контейнер секретного ключа сохранится только одна. |
С уважением, Александр. |
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close