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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline astarukhin  
#1 Оставлено : 7 июня 2024 г. 12:57:58(UTC)
astarukhin

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

Группы: Участники
Зарегистрирован: 22.12.2021(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 5 раз
Здравствуйте!
Имеется задача подписывать сообщение в формате PKCS7
Из примеров видно, что это делается функцией CryptSignMessage, которая в свою очередь требует список параметров в числе которых PCCERT_CONTEXT.
В моём случае у меня есть только ссылка на CSP, которую я получаю через CryptAcquireContext()
Я предварительно создал контейнер, получил через УЦ сертификат и импортировал его в контейнер

Хочется понять, как вытащить сертификат, имея дескриптор криптопровайдера
Online Русев Андрей  
#2 Оставлено : 7 июня 2024 г. 13:55:29(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,425

Сказал(а) «Спасибо»: 37 раз
Поблагодарили: 570 раз в 397 постах
Здравствуйте.
Чтобы находиться в рамках "белого API", вам нужен сертификат, установленный в хранилище со ссылкой на закрытый ключ. Его надо передавать в CryptSignMessage. CryptAcquireContext не нужен.
Официальная техподдержка. Официальная база знаний.
Offline astarukhin  
#3 Оставлено : 7 июня 2024 г. 14:12:25(UTC)
astarukhin

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

Группы: Участники
Зарегистрирован: 22.12.2021(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 5 раз
Да,
вот я пытаюсь получить серт как то так

HCERTSTORE store_handle = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER, L"\\\\.\\HDIMAGE\\andrey");

PCCERT_CONTEXT pTargetSert (0);
pTargetSert = CertFindCertificateInStore(store_handle, MY_ENCODING_TYPE, 0, CERT_FIND_ANY, 0, pTargetSert);

И не получается

Знающие люди сказали, что нужно загрузить сертификат из контейнера в локальное или In-memory хранилище и потом получать ссылку на него.
А я не могу найти информацию, как это сделать

CpTools, например, тоже подписывает что-то серфикатом только если его из контейнера установить в локальное хранилище
Offline astarukhin  
#4 Оставлено : 7 июня 2024 г. 14:15:19(UTC)
astarukhin

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

Группы: Участники
Зарегистрирован: 22.12.2021(UTC)
Сообщений: 36
Российская Федерация

Сказал(а) «Спасибо»: 5 раз
Вот что написали мне знающие люди

Цитата:
если сертификат присутствует только в контейнере, то его можно оттуда установить либо в my либо во временное хранилище.
главное не забыть прописать ссылку на закрытый ключ CERT_KEY_PROV_INFO_PROP_ID
Online Русев Андрей  
#5 Оставлено : 10 июня 2024 г. 14:20:45(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,425

Сказал(а) «Спасибо»: 37 раз
Поблагодарили: 570 раз в 397 постах
Сертификат в хранилище со ссылкой на закрытый ключ проще всего установить с помощью "Инструментов КриптоПро" (cptools), входящих в состав КриптоПро CSP 5.0: на вкладке "контейнеры" выбрать контейнер и нажать "установить сертификат". Если сертификата нет в контейнере, то подключить носитель (токен), после этого на вкладке "сертификаты" нажать "установить сертификаты" и выбрать файл с личным сертификатом. Здесь он установится в личное хранилище тоже со ссылкой на закрытый ключ, если этот закрытый ключ был доступен на момент установки (поэтому надо сперва подключить носитель). Если не был доступен, то встанет в хранилище "Другие пользователи".

P.S. Установка личных сертификатов - это настройка окружения, в общем случае задача сложная, поэтому её не стоит делать в прикладном ПО. Вместо этого есть подходящие инструменты в составе КриптоПро CSP. Для консоли - это certmgr.
Официальная техподдержка. Официальная база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.