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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Юрий  
#11 Оставлено : 25 января 2008 г. 19:12:04(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
И еще: как последний приведенный код найдет к какому именно ключевому контейнеру привязываться? Указан только тип криптопровайдера и тип ключа. Этого мало.
С уважением,
Юрий Строжевский
Offline Ильшат Абшарипов  
#12 Оставлено : 28 января 2008 г. 13:15:15(UTC)
Ильшат Абшарипов

Статус: Участник

Группы: Участники
Зарегистрирован: 24.01.2008(UTC)
Сообщений: 16
Мужчина
Откуда: Москва

Да, в коде была опечатка
Код:

// получаю имя провайдера
CryptGetProvParam(hProv, PP_NAME, PByte(Buf), BufSize, 0)
WideBuf2 := Buf;
provInfo.pwszProvName := PWideChar(WideBuf2);


Согласен с замечанием, что стоит наверное указывать параметры контейнера.
А насчет порядка могу сказать следующее: когда сначала добавляем сертификат, потом привязываем ключи, то привязки не происходит. А если изменить порядок на обратный: добавляем ключи, привязываем сертификат, добавляем сертификат, то работает.
Возможно я что-то пропустил?
Offline Юрий  
#13 Оставлено : 28 января 2008 г. 20:03:34(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 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". В большинстве случаев связь сертификата с ключом в этом случае устанавливается.
С уважением,
Юрий Строжевский
Offline Ильшат Абшарипов  
#14 Оставлено : 28 января 2008 г. 20:11:05(UTC)
Ильшат Абшарипов

Статус: Участник

Группы: Участники
Зарегистрирован: 24.01.2008(UTC)
Сообщений: 16
Мужчина
Откуда: Москва

Все именно так и делается. С одним отличием: у меня еще импортируются ключи.

У меня весьма похожая схема с одним маленьким отличием: я еще ключи в хранилище добавляю. Вашу схему это слегка модифицирует:
После 1) CertCreateCertificateContext
я делаю следующее:
1.1) открываю нужное мне хранилище CryptAcquireContext
1.2) импортирую ключи в хранилище CryptImportKey

А дальше уже п.п.2 и т.д.
Верно поступаю?
Offline Юрий  
#15 Оставлено : 28 января 2008 г. 23:54:26(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 93 раз в 67 постах
Все верно. Пункт 1.1 получает ссылку на криптопровайдера, 1.2 импортирует ключ в хранилище.
С уважением,
Юрий Строжевский
Offline Ильшат Абшарипов  
#16 Оставлено : 29 января 2008 г. 11:45:36(UTC)
Ильшат Абшарипов

Статус: Участник

Группы: Участники
Зарегистрирован: 24.01.2008(UTC)
Сообщений: 16
Мужчина
Откуда: Москва

Ну так и получается, что мы сначала ключи в контейнер импортируем, потом привязываем сертификат с ключами, и только потом заносим в хранилище сертификат :)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.