Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Нужен совет по использованию функций CryptAcquireContextW и CryptGetUserKey
Статус: Участник
Группы: Участники
Зарегистрирован: 24.04.2012(UTC) Сообщений: 12
|
Здравствуйте уважаемые! Хочу спросить совета по использованию функций CryptAcquireContextW и CryptGetUserKey. Собственно чего хочу? Хочу получить приватный ключ в формате PEM с помощью CriptoApy (использую wcrypt2). Для начала хочу его просто получить в любом формате, но не выходит. У меня нужный сертификат лежит в MY и он там один, я его выбираю, получаю для него параметры провайдера но потом ни CryptAcquireContextW ни CryptGetUserKey не дают позитивного результата, и ключа не получаю. Цитата: var cert: PCCERT_CONTEXT; hProv: HCRYPTPROV; hKey, expKey: HCRYPTKEY; dwDataLen, cb, cbData: DWORD; pb: PByte; pCryptKeyProvInfo: PCRYPT_KEY_PROV_INFO; ................... cert:= CertEnumCertificatesInStore(fStore, nil); CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, nil, @cbData); pCryptKeyProvInfo := PCRYPT_KEY_PROV_INFO(AllocMem(cbData)); //pCryptKeyProvInfo := AllocMem(cbData); CertGetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, pCryptKeyProvInfo, @cbData); ZeroMemory(@hProv,SizeOf(hProv)); ZeroMemory(@hKey,SizeOf(hKey)); if CryptAcquireContextW(@hProv, pCryptKeyProvInfo.pwszContainerName, pCryptKeyProvInfo.pwszProvName, pCryptKeyProvInfo.dwProvType,CRYPT_MACHINE_KEYSET) then begin if CryptGetUserKey(hProv, AT_KEYEXCHANGE, @hKey) then begin ...................................... обработка ключа
Я пробовал использовать CryptAcquireContextW с другими параметрами, и получал провайдера, но ключа не получаю всеравно... Цитата:CryptAcquireContextW(@hProv, nil, pCryptKeyProvInfo.pwszProvName, pCryptKeyProvInfo.dwProvType,CRYPT_VERIFYCONTEXT) Помогите, плиз, разобраться в чем причина... И еще, есть ли возможность с помощью CriptoApi получить сертификат с приватным ключом в формате PEM так если б я использовал команду openssl: Цитата:openssl pkcs12 -in cert.pfx -out cert.pem -nodes Я уже научился получать сертификат в формате pfx теперь надо преобразовать или получть в формате pem не используя openssl...
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 150  Поблагодарили: 33 раз в 32 постах
|
Есть функция GetLastError(). Какие коды ошибок она возвращает после функций CryptAcquireContext, CryptGetUserKey? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.04.2012(UTC) Сообщений: 12
|
После вызова CryptAcquireContextW GetLastError возвращает код 2148073494, и до CryptGetUserKey соответственно не доходит...
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Murzilkberg написал:После вызова CryptAcquireContextW GetLastError возвращает код 2148073494, и до CryptGetUserKey соответственно не доходит... syserrormessage(getlasterror()) в помощь Набор ключей не существует - 2148073494 Отредактировано пользователем 26 апреля 2012 г. 17:30:09(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.04.2012(UTC) Сообщений: 12
|
И как это понять? Я експортирую с помощью другой ф-и в формат pfx, с помощью openssl конвертирую в pem и получаю то же что получил бы если б експортировал сертификат с помощью консоли mmc с приватным ключом... А тут получается что набора ключей не существует... Или тут другая логика?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Murzilkberg написал:И как это понять? Я експортирую с помощью другой ф-и в формат pfx, с помощью openssl конвертирую в pem и получаю то же что получил бы если б експортировал сертификат с помощью консоли mmc с приватным ключом... А тут получается что набора ключей не существует... Или тут другая логика? if CryptAcquireContextW(@hProv, pCryptKeyProvInfo.pwszContainerName, pCryptKeyProvInfo.pwszProvName, pCryptKeyProvInfo.dwProvType, CRYPT_MACHINE_KEYSET) ? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.04.2012(UTC) Сообщений: 12
|
е... чесно говоря не очень в курсе этих флагов. Читал на msdn но так и до конца не разобрался что к чему....
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Murzilkberg написал:е... чесно говоря не очень в курсе этих флагов. Читал на msdn но так и до конца не разобрался что к чему.... http://msdn.microsoft.co...p/aa379886(v=vs.85).aspx+ Цитата: NTE_BAD_KEYSET 0x80090016L The key container could not be opened. A common cause of this error is that the key container does not exist. To create a key container, call CryptAcquireContext using the CRYPT_NEWKEYSET flag. This error code can also indicate that access to an existing key container is denied. Access rights to the container can be granted by the key set creator by using CryptSetProvParam.
Отредактировано пользователем 26 апреля 2012 г. 17:54:40(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Murzilkberg написал: и получаю то же что получил бы если б експортировал сертификат с помощью консоли mmc с приватным ключом... что показывает консоль (certmgr.msc) для этого сертификата? Есть закрытый ключ? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.04.2012(UTC) Сообщений: 12
|
в свойствах сертификата пишет что: You have a private key that corresponds to this certificate.
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Нужен совет по использованию функций CryptAcquireContextW и CryptGetUserKey
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close