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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Murzilkberg  
#1 Оставлено : 26 апреля 2012 г. 16:28:07(UTC)
Murzilkberg

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

Группы: Участники
Зарегистрирован: 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...
Offline Георгий Садофьев  
#2 Оставлено : 26 апреля 2012 г. 17:18:45(UTC)
Георгий Садофьев

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

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

Поблагодарили: 33 раз в 32 постах
Есть функция GetLastError().
Какие коды ошибок она возвращает после функций CryptAcquireContext, CryptGetUserKey?
Техническую поддержку оказываем тут
Наша база знаний
Offline Murzilkberg  
#3 Оставлено : 26 апреля 2012 г. 17:25:36(UTC)
Murzilkberg

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

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

После вызова CryptAcquireContextW GetLastError возвращает код 2148073494, и до CryptGetUserKey соответственно не доходит...
Offline Андрей Писарев  
#4 Оставлено : 26 апреля 2012 г. 17:29:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Murzilkberg написал:
После вызова CryptAcquireContextW GetLastError возвращает код 2148073494, и до CryptGetUserKey соответственно не доходит...


syserrormessage(getlasterror()) в помощь

Набор ключей не существует - 2148073494

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

Техническую поддержку оказываем тут
Наша база знаний
Offline Murzilkberg  
#5 Оставлено : 26 апреля 2012 г. 17:42:27(UTC)
Murzilkberg

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

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

И как это понять? Я експортирую с помощью другой ф-и в формат pfx, с помощью openssl конвертирую в pem и получаю то же что получил бы если б експортировал сертификат с помощью консоли mmc с приватным ключом... А тут получается что набора ключей не существует... Или тут другая логика?
Offline Андрей Писарев  
#6 Оставлено : 26 апреля 2012 г. 17:44:21(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 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) ?
Техническую поддержку оказываем тут
Наша база знаний
Offline Murzilkberg  
#7 Оставлено : 26 апреля 2012 г. 17:49:11(UTC)
Murzilkberg

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

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

е... чесно говоря не очень в курсе этих флагов. Читал на msdn но так и до конца не разобрался что к чему....Think
Offline Андрей Писарев  
#8 Оставлено : 26 апреля 2012 г. 17:49:28(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Murzilkberg написал:
е... чесно говоря не очень в курсе этих флагов. Читал на msdn но так и до конца не разобрался что к чему....Think

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)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#9 Оставлено : 26 апреля 2012 г. 17:53:59(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Murzilkberg написал:
и получаю то же что получил бы если б експортировал сертификат с помощью консоли mmc с приватным ключом...

что показывает консоль (certmgr.msc) для этого сертификата? Есть закрытый ключ?
Техническую поддержку оказываем тут
Наша база знаний
Offline Murzilkberg  
#10 Оставлено : 26 апреля 2012 г. 17:58:37(UTC)
Murzilkberg

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

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

в свойствах сертификата пишет что: You have a private key that corresponds to this certificate.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.