19.01.2004 13:46:47CERT_INFO открытого ключа Ответов: 4
Dmitry
Подскажите, пожалуйста, можно ли, имея открытый контейнер (от ф-ии CryptAcquireContext) получить CERT_INFO соответствующего этому контейнеру открытого ключа?
 
Ответы:
19.01.2004 16:08:31Василий
CERT_INFO - относится к сертификату, а не к открытому ключу.
Обычно задача обратная - по сертификату (из хранилища) нужно найти соответствующий закрытый ключ, записанный в контейнере.

В том случае, если сертификат установлен в контейнер секретного ключа, его можно прочитать оттуда и получить всю инфу.
(функцией CryptGetKeyParam (... KP_CERTIFICATE...), см. исходники нашего примера csptest - http://www.cryptopro.ru/CryptoPro/test/sample2_0.zip )
Если же сертификат не установлен в контейнер, то не судьба... Хотя бы потому, что может быть много разных сертификатов, соответствующих одной ключевой паре.
19.01.2004 16:32:43Dmitry
Перефразирую вопрос.
Требуется ли мне для расшифровки присланного мне сообщения извлекать собственный сертификат или достаточно только имеющегося контейнера?
Если достаточно, то как мне определить, подходит ли конкретно этот контейнер?
Насчет KP_CERTIFICATE - это пример я видел. Однако не нашел в MSDN упоминания об этом значении.
23.01.2004 13:45:51Василий
Всё зависит от того, на каком уровне Вы работаете. Есть функции шифрования-дешифрования, которым даются на вход только сертификаты. (примеры см. в том же csptest-е). При этом они сами вызывают функции более низкого уровня: для открытия контейнера (CryptAcquireContext), для доступа к ключам (CryptGetUserKey), для создания, экспорта-импорта сессионного ключа (CryptGenKey, CryptExportKey, CryptImportKey), для задания синхровектора (CryptSetKeyParam), для шифрования/дешифрования (CryptEncrypt, CryptDecrypt).
Так вот, на низком уровне сертификаты не нужны. Тут уж ваша задача задать, какие контейнеры будут использоваться для за/расшифрования.
В любом случае, не возникнет задачи определения сертификата, соответствующего открытому функцией CryptAcquireContext контейнеру.
23.01.2004 17:04:30Dmitry
Теперь разобрался. Спасибо за помощь.