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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mark antony  
#1 Оставлено : 29 мая 2009 г. 15:20:08(UTC)
mark antony

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

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

Доброго времени суток.

Использую функции CryptoApi. Имею экспортированный в формате X509 сертификат.

Импортирую сертификат в CryptoPro CSP. Достаю оттуда публичный ключ в byte*. Получаю, что длина массива 66.

Достаю публичный ключ из контейнера CryptoPro CSP с помощью функции GetUserKey, получаю длину массива 100.

Почему?

Дело в том, что я подписываю данные. Мне необходимо при верификации данных доставать публичный ключ из сертификата пользователя, а не держать отдельно еще и файл с публичным ключом. Пытаюсь так делать, но CryptVerifySignature возвращает false, а если импортирую публичный ключ из файла, то true. Почему?

Вот пример кода:
1. При экспорте/импорте публичного ключа
CryptGetUserKey(hProv, AT_SIGNATURE, phPubKey);
CryptExportKey(hPubKey, NULL, PUBLICKEYBLOB, 0, publicKeyBlob, dwBlobLen);

CryptImportKey(phProv, publicKeyBlob, publicKeyBlobLength, NULL, 0, phPublicKeyImported)
//Получаю ключ длиной 100 байт

2. При импорте сертификата:
CERT_CONTEXT context = CertCreateCertificateContext(X509_ASN_ENCODING, certEncoded, certEncodedLength);
CryptImportPublicKeyInfoEx(hProv, X509_ASN_ENCODING, context->pCertInfo->SubjectPublicKeyInfo, 0, 0, NULL, phKey);
//Получаю ключ длиной 66 байт.

Заранее благодарю.
Offline Kirill Sobolev  
#2 Оставлено : 29 мая 2009 г. 16:53:00(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
А почему у Вас в вызове CryptImportPublicKeyInfoEx 4й параметр aiKeyAlg 0?
По MSDN
Цитата:
aiKeyAlg
An ALG_ID structure that contains a CSP-specific algorithm to override the CALG_RSA_KEYX default algorithm.

Вот пример - http://www.cryptopro.ru/...ro/forum/view.asp?q=2674
Или же Вы можете использовать CryptImportPublicKeyInfo, там такого параметра нет.

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

Техническую поддержку оказываем тут
Наша база знаний
Offline mark antony  
#3 Оставлено : 29 мая 2009 г. 17:39:15(UTC)
mark antony

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

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

CryptImportPublicKeyInfo пробовали, результат такой же.

Ваша ссылка не работает.

Что касается данной функции, то параметры взяты из примера CryptoPro_SDK\Samples\ExportingCertificate
Offline Kirill Sobolev  
#4 Оставлено : 29 мая 2009 г. 17:48:02(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
mark antony написал:

Что касается данной функции, то параметры взяты из примера CryptoPro_SDK\Samples\ExportingCertificate

Точку в ссылке убрал.
А сам пример работает?
Техническую поддержку оказываем тут
Наша база знаний
Offline mark antony  
#5 Оставлено : 29 мая 2009 г. 18:06:41(UTC)
mark antony

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

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

Спасибо за помощь.

Попробовали как в примере параметр CALG_GR3410 - результат не изменился.
Offline Kirill Sobolev  
#6 Оставлено : 29 мая 2009 г. 18:56:41(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,732
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Можно еще такой эксперимент сделать - после вызова CryptImportPublicKeyInfoEx сделать CryptExportKey и посмотреть, отличается ли ключи из сертификата и контейнера.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.