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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline AJIEKCAHDP  
#1 Оставлено : 2 декабря 2009 г. 18:59:20(UTC)
AJIEKCAHDP

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

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

Добрый день.

Не удается создать дескрипторы ключевых контейнеров расположенных на
нескольких носителях.
Если носитель один, то вопросов нет, все хорошо.

Очевидно, проблема возникает при установленом флаге CRYPT_SILENT,
который дает возможность не отображать UI CSP
(окно выбора носителя в нашем случае).

Если флаг выставить в 0x000, дескрипторы для всех контейнеров на всех
доступных считывателях создаются успешно,
при этом на какое то время открывается окно CSP, в котором отображается
перечень всех носителей.

НО!!! Пользователь то при установленом флаге в 0x000 ничего не выбирает
(ему не надо выбирать считыватель, хотя и есть такая возможность),
окно само пропадет через долю секунды, т.е. CSP произведет поиск по всем носителям
автоматом.
А при CRYPT_SILENT такого почему то не происходит.

Как с этим бороться?
Можно, конечно, вызвать CryptAcquireContext() с dwFlags=0 и самомоу
гасить в другом потоке это окно со считывателями, но это ведь костыли.

Оставить постоянные мерцания этого окна со считывателями явно не
вариант, окно попросту не нужно для пользователя (особенно плохо
смотрится, когда идет обращение к десятку ключевых контейнеров).

Подскажите, пожалуйста, как можно решить эту проблему.

1. Вот тут сможем открыть контейнер, но не с любого установленного
носителя

//---------------------------------------
// Получим дескриптор контейнера ключей

if ( !CryptAcquireContext(
&phProv,
pszContName,
pszCSP,
dwCSP,
CRYPT_SILENT))
throw (ERROR_BAD_ARGUMENTS);


2. А вот тут откроется любой контейнер с любого считывателя
(но будет мерцать окошко)

//---------------------------------------
// Получим дескриптор контейнера ключей

if ( !CryptAcquireContext(
&phProv,
pszContName,
pszCSP,
dwCSP,
0)) // <<<<------------------ вот тут 0
throw (ERROR_BAD_ARGUMENTS);


CSP: KC1 3.0.3300.3
Win: XP sp3
Ключевые ностиели: Дискета + Реестр + Флешка

Отредактировано пользователем 2 декабря 2009 г. 19:00:48(UTC)  | Причина: Не указана

Offline Алексей Завьялов  
#2 Оставлено : 3 декабря 2009 г. 19:27:10(UTC)
Алексей Завьялов

Статус: Новичок

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

Здравствуйте, я тоже сталкивался с такой проблемой.

Вообще по моим наблюдениям окно в этой функции выскакивает тогда когда криптопровайдер не может найти контейнер по его названию. Дело в том что контейнер может располгаться в разных местах реестра в зависимости от ветки распожения сертифката. Сертифкат например может располагаться в локал юзере, а контейнер в локал машине, тогда выскочит окно, если Вы явно не укажите криптопровайдеру, что искать контейнер нужно в разделе локал машина.
С дискетами и флешками, я не работал но думаю, что проблема примерно в том же.
В общем в моей практике если контейнер найден, то окно не появляется и не мелькает..Если контейнер не найден и установлен флаг CRYPT_SILENT то функция CryptAcquireContext возвращает ошибку, если флаг CRYPT_SILENT не установлен то появлется окно с запросом местаположения контейнера.
Offline AJIEKCAHDP  
#3 Оставлено : 3 декабря 2009 г. 19:53:38(UTC)
AJIEKCAHDP

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

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

Да, все верно.
Только это окно появляется, и через долю секунды CSP сам находит контейнер, и окно пропадает.
А вот если указать CRYPT_SILENT, то CSP сам его не находит и через указание uniquename контейнера (тот, что с префиксом считывателя) не дает найти.

Отредактировано пользователем 3 декабря 2009 г. 19:55:52(UTC)  | Причина: Не указана

Offline Челпанов А.  
#4 Оставлено : 4 декабря 2009 г. 15:34:19(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
CSP выкидывает окошко с выбором ключевого контейнера всякий раз, когда не может найти контейнер "с ходу", чтобы пользователь не решил, что CSP "висит". Доступ к некоторым типам носителей может быть долгим, тем более, когда надо опросить несколько считывателей. На компьютере (в реестре)сохраняется информация о том на каком типе носителя (дискета, реестр, смарт-карта...) хранится контейнер. Если сконфигурировано по одному считывателю для каждого типа носителя (один дисковод, один считыватель смарт-карт, один считыватель таблеток Dallas) окошко обычно не выскочит, а вот при опросе двух дисководов (или дисковода и флешки) окно будет. Бороться с этим можно, если Вы знаете в какой именно дисковод пользователь вставит дискету - в A или в B, на какой флешке искать - под буквой F или G. Для этого надо передать в AcquireContext FQCN (Fully Qualified container name - полностью квалифицированное) имя контейнера, например '\\.\FAT12_A\Ivanov' или FQCN уникальное имя контейнера, например '\\.\FAT12_A\FAT12\01234567_ABCDEF\IVANOV.000\ABCD'. Об именовании контейнеров можно почитать в КриптоПро SDK в разделе 'Интерфейс криптопровайдера "КриптоПро CSP"/Дополнительные параметры и определения/Имя контейнера'. Как получить список считывателей, см. SDK функция CPGetProParam PP_ENUMREADERS
С уважением, Александр.
Offline AJIEKCAHDP  
#5 Оставлено : 4 декабря 2009 г. 16:12:22(UTC)
AJIEKCAHDP

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

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

Спасибо
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.