Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
И еще: как последний приведенный код найдет к какому именно ключевому контейнеру привязываться? Указан только тип криптопровайдера и тип ключа. Этого мало. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2008(UTC) Сообщений: 16 Откуда: Москва
|
Да, в коде была опечатка Код:
// получаю имя провайдера
CryptGetProvParam(hProv, PP_NAME, PByte(Buf), BufSize, 0)
WideBuf2 := Buf;
provInfo.pwszProvName := PWideChar(WideBuf2);
Согласен с замечанием, что стоит наверное указывать параметры контейнера. А насчет порядка могу сказать следующее: когда сначала добавляем сертификат, потом привязываем ключи, то привязки не происходит. А если изменить порядок на обратный: добавляем ключи, привязываем сертификат, добавляем сертификат, то работает. Возможно я что-то пропустил?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Работает следующая схема: 1) CertCreateCertificateContext 2) CertSetCertificateContextProperty(..., CERT_KEY_PROV_INFO_PROP_ID, ...) 3) CertOpenSystemStore 4) CertAddCertificateContextToStore 5) CertFreeCertificateContext 6) CertCloseStore 7) CryptReleaseContext
Не знаю какой вариант применяется у Вас. Экспериментировал с различными вариантами: попробуйте не освобождать контекст сертификата до закрытия хранилища. То есть просто сделайте "CertCloseStore" без "CertFreeCertificateContext". В большинстве случаев связь сертификата с ключом в этом случае устанавливается. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2008(UTC) Сообщений: 16 Откуда: Москва
|
Все именно так и делается. С одним отличием: у меня еще импортируются ключи.
У меня весьма похожая схема с одним маленьким отличием: я еще ключи в хранилище добавляю. Вашу схему это слегка модифицирует: После 1) CertCreateCertificateContext я делаю следующее: 1.1) открываю нужное мне хранилище CryptAcquireContext 1.2) импортирую ключи в хранилище CryptImportKey
А дальше уже п.п.2 и т.д. Верно поступаю?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.01.2008(UTC) Сообщений: 671 Откуда: Йошкар-Ола Сказал «Спасибо»: 3 раз Поблагодарили: 93 раз в 67 постах
|
Все верно. Пункт 1.1 получает ссылку на криптопровайдера, 1.2 импортирует ключ в хранилище. |
С уважением, Юрий Строжевский |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2008(UTC) Сообщений: 16 Откуда: Москва
|
Ну так и получается, что мы сначала ключи в контейнер импортируем, потом привязываем сертификат с ключами, и только потом заносим в хранилище сертификат :)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close