02.03.2006 16:34:32Можно ли подписать документ без предварительной инсталляции сертификата? Ответов: 10
Владимир Авдиев
Пользователь имеет сертификат и соотвествующие ключи на носителе eToken. Можно ли подписать документ этими ключами без предварительной инсталляции сертификата в хранилище?
Ведь КриптоПро позволяет при установке нового сертификата браузить носители и хранилища. Так почему я не могу найти и тут же использовать этот сертификат?


использовать ключи для ЭЦП без предварительной инсталляции сертификата
 
Ответы:
02.03.2006 16:57:28Николай
Добрый день!

Мной при работе с eToken была установлена довольно интересная фишечка. Если Вы по коду выполняет открытие хранилище с уже установленным eToken ключом - то "всасывание" сертификатов (т.е. их установка в локальное хранилище) происходит автоматически.
02.03.2006 17:04:00Владимир Авдиев
Николай,

я пытался открыть хранилище на eToken, но не нашёл как это сделать. CAPICOM не позволяет указать тип такого хранилища.
Могли бы показать пример кода?
02.03.2006 17:20:31Николай
могу подробней. Итак - у меня обычный USB eToken с созданным где-то на другой машине закрытым ключом и там же был установлен сертификат. Переносим ключ на другой компьютер, подключаем.

В коде делаем следующее:
HCERTSTORE m_hSystemStore = CertOpenSystemStore(NULL, "MY");
Все - смотрим в mmc - сертификат установлен вместе с закрытой связью.

Но это работает только при следующих условиях:
1. Сертификат для этого ключа раньше не устанавливался.
2. Ключ вставлен перед выполнением функции открытия хранилища (и "засасывание" выполняется только один раз). Если не доставая ключ удалить сертификат из хранилища и попробовать его переоткрыть - повторно сертификат не установится. Только после перетыкания ключа (достали - поставили назад)
3. Отсутсвует smart card в ридере. С смарт картами вообще диалог отдельный - они как-то странно блокируют нормальную работу еТокена (чего только стоит невозможность просмотреть нормально информацию по ключу с использованием стандартной утилиты еТокена).
03.03.2006 10:49:39Василий
Уточнение.
Это работает для сертификатов RSA.

Для ГОСТ - только при условии, что используется "КриптоПро CSP 3.0" и "КриптоПро WinLogon".
03.03.2006 11:00:12Владимир Авдиев
У нас нет версии 3.0 и WinLogon не используется. Значит мне это не подойдёт.
Да и задача, всё-таки, немного другая. Мне, вообще, не хотелось бы устанавливать сертификат пользователя на компьютер.
Открываем панель управления - КриптоПро - вкладка Сервис - кнопка Просмотреть сертификаты в хранилище - кнопка Обзор. Открывается список хранилищь на разных носителях. Я выбираю хранилище и мне показывается оттуда сертификат.
Вопрос: каким образом мне самому открыть такой диалог и вернуть в мой код выбранный таким образом сертификат? Это возможно? Или это закрытые методы?
03.03.2006 11:05:36Василий
Конечно возможно.
Стандартные функции CryptoAPI:
CryptAcquireContext,
CryptGetUserKey,
CryptGetKeyParam(...KP_CERTIFICATE...)

Описание см. в MSDN и в http://www.cryptopro.ru/CryptoPro/products/csp/20/csp-2-0.chm
03.03.2006 12:32:33Николай
Для того, чтобы корректно выполнить CryptAcquireContext надо знать имя контейнера, так? Хотя если необходимо просто просмотреть сертификаты - этого должно быть достаточно.

не смог просмотреть chm файл, указанный Вами в предыдущем ответе. Выводит:

Действие отменено
Internet Explorer не удается подключиться к запрошенной веб-странице. Возможно, страница временно недоступна.
03.03.2006 14:53:51Владимир Авдиев
Василий,
мой код исполняется на IE и написан на JScript. Т.о. я могу использовать только CAPICOM.
06.03.2006 10:46:49Василий
По поводу http://www.cryptopro.ru/CryptoPro/products/csp/20/csp-2-0.chm
Скачайте его на диск, нажмите на нём правой кнопкой мыши - Свойства - Разблокировать. После этого будет запускаться.
Это злой Microsoft ведёт борьюу с открытием и передачей файлов *.chm по сети (типа, небезопасно)
По поводу имени контейнера - если не хотите ставить сертификат в хранилище - то имя надо знать (или получить перечислением).
06.03.2006 11:01:21Василий
Владимиру.
Может, проще попросить пользователя в панели управления компьютером открыть КриптоПро CSP - Сервис - Просмотреть сертификаты в контейнере - Обзор -...- Свойства - Установить сертификат?
Ведь, для успешной работы, нужно много чего сделать на компьютере пользователя (не средствами js): установить CSP, установить eToken RTE, установить модуль поддержки "Etoken для КриптоПро CSP 2.0", добавить eToken как считыватель и ещё надо просить согласие пользователя на установку корневого сертификата ЦС для того, чтобы выразить доверие всем выдвнным на этом ЦС сертификатам.