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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline navrocky  
#1 Оставлено : 25 марта 2026 г. 15:23:15(UTC)
navrocky

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

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

Сказал(а) «Спасибо»: 10 раз
Поблагодарили: 2 раз в 2 постах
Добрый день.

У меня самописный сервис подписания, который использует КриптоПро CSP5.

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

До этого я провалидировал блоб функциями PFXIsPFXBlob и PFXVerifyPassword, всё с ним ок.

PFX блоб импортируется и я получаю валидный HCERTSTORE. Я перечисляю сертификаты в хранилище функцией CertEnumCertificatesInStore, получаю один PCCERT_CONTEXT в котором правильная информация о сертификате.
Далее мне надо как-то убедиться что в хранилище присутствует приватный ключ ассоциированный с сертификатом и я не пойму как это сделать.

Я пытался вызвать функцию CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, &provInfo, &provInfoSize), но она выдаёт ошибку: Объект или свойство не найдено. (2148081668)

Как правильно импортировать PFX, чтобы можно было понять что там есть приватный ключ и работало подписание данных? Какие использовать для этого функции и флаги?

На постоянку я сохранять ключ в хранилище не хочу, так как начинает интерактивно запрашиваться пароль на новый контейнер. А у меня это серверная история.

Отредактировано пользователем 25 марта 2026 г. 15:25:31(UTC)  | Причина: Не указана

Offline Илья К.А.  
#2 Оставлено : 27 марта 2026 г. 12:11:07(UTC)
Илья К.А.

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 5 раз в 5 постах
Добрый день.

В документации PFXImportCertStore описано поведение флага PKCS12_NO_PERSIST_KEY: https://learn.microsoft....crypt-pfximportcertstore
CERT_KEY_PROV_INFO_PROP_ID с ним не задаётся.

Проверить наличие закрытого ключа можно, например, проверив наличие свойства CERT_KEY_CONTEXT_PROP_ID.
Или просто попытаться получить его:
Код:
BOOL hasPrivateKey = CryptAcquireCertificatePrivateKey(pCert, CRYPT_ACQUIRE_USE_PROV_INFO_FLAG | CRYPT_ACQUIRE_SILENT_FLAG, ...);
thanks 1 пользователь поблагодарил Илья К.А. за этот пост.
navrocky оставлено 27.03.2026(UTC)
Offline navrocky  
#3 Оставлено : 27 марта 2026 г. 13:17:53(UTC)
navrocky

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

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

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