Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.06.2019(UTC) Сообщений: 30  Откуда: Самара Сказал(а) «Спасибо»: 4 раз
|
В структуре CERT_INFO нет ссылки на Container тогда, как при перечислении сертификатов утилитой certmgr есть, не подскажете как по сертификату определить ключевой контейнер? Задача по сертификату выбрать ключевой контейнер и подписать данные. Отредактировано пользователем 28 июня 2019 г. 8:49:26(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 398 раз в 367 постах
|
Тут дело в том, что хранилище сертификатов может содержать свойства, которых нет в самом сертификате и ссылка на контейнер одно из них. В информации о самом сертификате CERT_INFO нет ссылки на контейнер, ведь ссылка на контейнер хранится как свойство в хранилище, а не в самом сертификате. Смысл в том, что сертификат или контекст сертификата может быть получен не из хранилища, а из файла (или области памяти) и в этом случае ссылка на контейнер будет недоступна. Придется перечислять все контейнеры и сравнивать открытый ключ (что и происходит при первичной установке в хранилище) или искать такой же сертификат в хранилище. Напротив, если контекст сертификата перечислен из хранилища, то он неявно содержит и свойства из хранилища, в том числе и информацию о ссылке на контейнер.
В сертификатах кода безопасности предусмотрено специальное поле с именем контейнера и его можно найти в расширениях сертификата, однако если запрос сертификата создавался средствами КриптоПро, то этого поля в сертификате не будет и к сертификату можно привязать любой контейнер. Работать полноценно будет при условии совпадении открытого ключа в сертификате и открытого ключа в контейнере, но на уровне API привязать можно любой, так как ссылка трактуется как текст для криптопровайдера.
В итоге, если контекст сертификата перечислен из хранилища сертификатов, то 1) можно запросить свойство контекста сертификата CERT_KEY_PROV_INFO_PROP_ID с информацией о ссылке. Затем по информации можно запросить экземпляр криптопровайдера связанный с контекстом сертификата. Это разрешенный способ во всех версиях КриптоПро. Если не особо нужно само имя контейнера, а нужен экземпляр криптопровайдера уже связанный с контекстом сертификата, то можно поступить еще проще и 2) вызвать функцию CryptAcquireCertificatePrivateKey. Опять же работает на контекстах из хранилища, разрешена без тематических исследований с 4.0.9944. Отредактировано пользователем 25 июня 2019 г. 5:55:24(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close