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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mick  
#1 Оставлено : 15 апреля 2009 г. 0:34:46(UTC)
mick

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

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

Создаю ключевой контейнер, и произвожу генерацию ключей AT_SIGNATURE и AT_KEYEXCHANGE
После чего контейнер виден (в том числе инструментальными средствами самой CSP), CryptGetUserKey говорит, что ключевые пары существуют, CryptAcquireContext тоже успешно открывает контекст. Успешно читаются параметры контейнера и ключей.

Далее пытаюсь создать запрос на сертификат (по примерам msdn и других статей)

Проблема в том,что CryptExportPublicKeyInfo возвращает $8009000D (-2146893811) 'Ключ не существует'

Подскажите куда копать?

PS в версии 2.0 примерно тот же код работал на ура.


Offline Максим Коллегин  
#2 Оставлено : 15 апреля 2009 г. 0:48:35(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 715 раз в 620 постах
А можно кусок кода?
Такой вполне работает:
Цитата:
HCRYPTPROV hProv;
HCRYPTKEY hKey;
if (!CryptAcquireContext(&hProv, L"xxxx", NULL, 75, 0))
return 1;
DWORD dwLen = 0;
if (!CryptExportPublicKeyInfo(hProv, AT_KEYEXCHANGE, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, NULL, &dwLen))
return 3;
PBYTE pKey = new BYTE[dwLen];
if (!CryptExportPublicKeyInfo(hProv, AT_KEYEXCHANGE, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, (PCERT_PUBLIC_KEY_INFO)pKey, &dwLen))
return 3;
return 0;

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

Знания в базе знаний, поддержка в техподдержке
Offline mick  
#3 Оставлено : 15 апреля 2009 г. 13:48:22(UTC)
mick

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

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

Код стандартный:

Код:
if CryptExportPublicKeyInfo(
                            hProv,              
                            AT_KEYEXCHANGE,          
                            PKCS_7_ASN_ENCODING or X509_ASN_ENCODING,   
                            nil,
                            @cbPublicKeyInfo 
                            ) then

где

Код:
cbPublicKeyInfo      : DWORD;

Прототип CryptExportPublicKeyInfo:

Код:
function CryptExportPublicKeyInfo(hCryptProv :HCRYPTPROV;
                                  dwKeySpec :DWORD;
                                  dwCertEncodingType :DWORD;
                                  pInfo :PCERT_PUBLIC_KEY_INFO;
                                  pcbInfo :PDWORD):BOOL ; stdcall;
Offline Максим Коллегин  
#4 Оставлено : 16 апреля 2009 г. 1:13:26(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 715 раз в 620 постах
Нужен законченный кусок кода, вызывающий ошибку, лучше на C.
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.