Всем привет, как ваши дела? Давно тут не был.
Вопрос такого плана: взялся было автоматизировать подпись для работы в приложении, но столкнулся с непониманием и загадочностью wincrypt api. Использую ЭЦП SDK КриптоПро. Хочу, имея контейнер на флешке, добавлять только открытый ключ в список сертификатов «Личное» на локальном компе, чтобы подписывать документы только тогда, когда вставлена флешка (возможно, могу ошибаться, что в таком случае добавляется только открытый ключ). Во всех описаниях доки винды делают, как мне показалось, все с нуля, и до меня не доходит, какой порядок действий нужен в моем случае, когда у меня уже есть токен.
Вот пример, который, как мне кажется должен мне подойти: https://docs.microsoft.com/en-us/windows/win32/seccrypto/example-c-program-getting-and-setting-certificate-properties
Но где нужно указать путь до папки с контейнером…
Нашел еще один пример на форуме у КриптоПро https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=14724
Но тот же вопрос, плюс - зачем копировать или создавать новый контейнер.
Я вижу такой порядок действий:
- Проверить, что сертификат на флешке мне подходит, и получить его «хендл» для дальнейшей работы с ним (это не знаю как)
- Открыть хранилище CertOpenSystemStore(0, _T(«MY»));
- Создать контекст сертификата, в который потом будет положено что-то вроде ссылки на то, что на флешке CertCreateCertificateContext
- Откопать его имя и сделать ассоциацию его свойств с контекстом, который был в предыдущем шаге 3. CertSetCertificateContextProperty
- Скопировать содержимое контекста в локальное хранилище CertAddCertificateContextToStore
С какими параметрами это нужно делать - не совсем понятно.
Если у кого-то в этом есть опыт, подскажите, пожалуйста, что нужно делать, и, желательно названия этих виндовских функций., лучше всего, конечно, какой-то пример по мою тему…