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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline romar777  
#1 Оставлено : 13 апреля 2025 г. 10:39:25(UTC)
romar777

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 2 раз
Есть задача: для определенных сертификатов в CpX509Store проверить доступность контейнера закрытого ключа.
HasPrivateKey всего лишь говорит, о том, что в принципе есть связка с закрытым ключом.
Любое обращение к PrivateKey (чтобы взять оттуда в итоге провайдера и CspKeyContainerInfo) при извлеченности носителя вызывает UI окно "не вставлен носитель".
Как-то можно вывод окна подавить и обработать ошибку в таком случае самостоятельно?
В дальнейшем еще понадобится тихая подпись без вставьте контейнер и без введите пин-код.

Wanna join the discussion?! Login to your Форум КриптоПро forum account. Новые регистрации запрещены.

Offline Андрей *  
#2 Оставлено : 13 апреля 2025 г. 13:15:36(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Автор: romar777 Перейти к цитате
Есть задача: для определенных сертификатов в CpX509Store проверить доступность контейнера закрытого ключа.
HasPrivateKey всего лишь говорит, о том, что в принципе есть связка с закрытым ключом.
Любое обращение к PrivateKey (чтобы взять оттуда в итоге провайдера и CspKeyContainerInfo) при извлеченности носителя вызывает UI окно "не вставлен носитель".
Как-то можно вывод окна подавить и обработать ошибку в таком случае самостоятельно?
В дальнейшем еще понадобится тихая подпись без вставьте контейнер и без введите пин-код.


Имя контейнера (связка сертификата) можно запросить, не обращаясь к нему.
Как минимум через p\invoke к MS CryptoApi
Техническую поддержку оказываем тут
Наша база знаний
Offline romar777  
#3 Оставлено : 17 апреля 2025 г. 8:25:14(UTC)
romar777

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 2 раз
Цитата:
Имя контейнера (связка сертификата) можно запросить, не обращаясь к нему.
Как минимум через p\invoke к MS CryptoApi

В итоге сделал с помощью функций crypt32.dll. Просто думал, что можно проще (типа флага silent/noUI поставить - когда с JCP игрался вроде видел там подобное), не прибегая к низкоуровневому коду. К тому же в дальнейшем еще под Linux планируется...
Offline Артём Макаров  
#4 Оставлено : 17 апреля 2025 г. 10:01:09(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 221

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 66 раз в 61 постах
Собрали для тестов новый Libcore, добавили public метод по получению информации о контейнере. Обращение к нему не открывает контейнер с ключом.

Дальше можно попробовать открывать контейнер через создание провайдера с нужными флагами, добавив Flags = CspProviderFlags.NoPrompt | CspProviderFlags.UseExistingKey

Код:
CpCspParameters containerParams = cert.PrivateKeyCspParameters;


https://file.cryptopro.r...VW4Jmyvo03NG/libcore.zip
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Артём Макаров за этот пост.
Андрей * оставлено 17.04.2025(UTC), romar777 оставлено 17.04.2025(UTC)
Offline romar777  
#5 Оставлено : 17 апреля 2025 г. 11:16:08(UTC)
romar777

Статус: Новичок

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 2 раз
Автор: Артём Макаров Перейти к цитате
Собрали для тестов новый Libcore, добавили public метод по получению информации о контейнере. Обращение к нему не открывает контейнер с ключом.
Дальше можно попробовать открывать контейнер через создание провайдера с нужными флагами, добавив Flags = CspProviderFlags.NoPrompt | CspProviderFlags.UseExistingKey
Код:
CpCspParameters containerParams = cert.PrivateKeyCspParameters;


Спасибо, работает ожидаемо. Имя контейнера получаем, тестируем подписание через создание провайдера с нужными флагами. Но есть момент если подписывать с CpCmsSigner:
ComputeSignature(CpCmsSigner signer, bool silent);
silent никак не влияет, описания нет, я предполагаю, что true для того чтобы не было окон типа "введите пин-код" (если не сохранен), но запрашивает все равно.

Отредактировано пользователем 17 апреля 2025 г. 11:18:44(UTC)  | Причина: Не указана

Offline Артём Макаров  
#6 Оставлено : 17 апреля 2025 г. 11:36:02(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 221

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 66 раз в 61 постах
Автор: romar777 Перейти к цитате
Автор: Артём Макаров Перейти к цитате
Собрали для тестов новый Libcore, добавили public метод по получению информации о контейнере. Обращение к нему не открывает контейнер с ключом.
Дальше можно попробовать открывать контейнер через создание провайдера с нужными флагами, добавив Flags = CspProviderFlags.NoPrompt | CspProviderFlags.UseExistingKey
Код:
CpCspParameters containerParams = cert.PrivateKeyCspParameters;


Спасибо, работает ожидаемо. Имя контейнера получаем, тестируем подписание через создание провайдера с нужными флагами. Но есть момент если подписывать с CpCmsSigner:
ComputeSignature(CpCmsSigner signer, bool silent);
silent никак не влияет, описания нет, я предполагаю, что true для того чтобы не было окон типа "введите пин-код" (если не сохранен), но запрашивает все равно.


Тут исходная логика ms, данный флаг выставляет CRYPT_ACQUIRE_SILENT_FLAG при CryptAcquireCertificatePrivateKey. Почему при выставлении данного флага прокидывается окошко с пином - не готов сказать.

Для CpCmsSigner есть конструктор с явной передачей закрытого ключа. Можно открывать ключ для параметров, проверять его наличие, и затем передавать в CpCmsSigner:

Код:

CpCmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, gostCert, gostKey)
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.