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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline urbrato  
#1 Оставлено : 30 ноября 2016 г. 1:32:13(UTC)
urbrato

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

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

Сказал(а) «Спасибо»: 7 раз
Задача - exit point для WebSphere MessageQueue для аутентификации и шифрования обмена при помощи КриптоПро CSP 3.6.

Пусть HCRYPTPROV hProv - дескриптор криптопровайдера, CERT_CONTEXT *rcrt - сертификат респондента.

Хочу получить ключ обмена. Для этого - получаю открытый ключ из сертификата респондента, экспортирую его в блоб, получаю свой закрытый ключ и с ним импортирую блоб.

Если отбросить проверки на успешность, подчистку ресурсов, логирование и прочее, оставив только общую идею, это выглядит примерно так:

HCRYPTKEY rpk;
CryptImportPublicKeyInfoEx(
hProv,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
&rcrt->pCertInfo->SubjectPublicKeyInfo,
CALG_GR3410EL, 0, NULL, &rpk);

BYTE* pData = null;
unsigned long szData = 0;
CryptExportKey(rpk, 0, PUBLICKEYBLOB, 0, pData, &(szData));
pData = new BYTE[szData];
CryptExportKey(rpk, 0, PUBLICKEYBLOB, 0, pData, &(szData));

HCRYPTKEY pk;
CryptGetUserKey(hProv, AT_KEYEXCHANGE, &pk);

HCRYPTKEY exk;
CryptImportKey(hProv, pData, szData, pk, 0, &exk);

Последний вызов - CryptImportKey - возвращает 0. При этом GetLastError() выдаёт 0x8010006b - код, который обычно означает неправильный ввод пароля, пин-кода и т.д.
Соответственно, возникает вопрос - что же я делаю не так?

Спасибо!
Offline Максим Коллегин  
#2 Оставлено : 30 ноября 2016 г. 8:49:01(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
А контейнер без пароля?
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
urbrato оставлено 01.12.2016(UTC)
Offline urbrato  
#3 Оставлено : 1 декабря 2016 г. 0:25:33(UTC)
urbrato

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: maxdm Перейти к цитате
А контейнер без пароля?


Настраивал не я, но, насколько могу судить, с паролем - через оболочку я могу посмотреть выданные сертификаты без необходимости что-либо вводить, но, скажем, попытка изменить пароль закрытого ключа вызвала окно ввода PIN (причём сразу с предупреждением, что первая попытка использована и завершилась неудачей). Отмена окна вызывает ту же ошибку 0x8010006b.
Offline Максим Коллегин  
#4 Оставлено : 1 декабря 2016 г. 10:42:37(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Если некуда выкинуть окно - будет такая ошибка, иногда NTE_SILENT_CONTEXT. Смените пароль на пустой. А если при открытии используется первая попытка - возможно, сохранен неправилльный (старый) пароль.
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
urbrato оставлено 01.12.2016(UTC)
Offline urbrato  
#5 Оставлено : 1 декабря 2016 г. 11:09:41(UTC)
urbrato

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

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

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