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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MCR  
#1 Оставлено : 12 декабря 2012 г. 16:37:18(UTC)
MCR

Статус: Активный участник

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

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах
Давно в любимой ветке не было новых тем. Пора создать новую тему.Angel

Прошу помощи у Гуру в следующем вопросе.

Задача: декодировать все расширения сертификата (именно сертификата, не запроса на сертификат).
Что делаю:
1. Загружаю контекст из файла сертификата или из памяти.
2. Получаю Контекст сертификата.
3. Декодирую каждое из сExtension следующим образом.
Цитата:
CryptDecodeObject(
contextCert.dwCertEncodingType,
contextCert.pCertInfo.rgExtension[i].pszObjId,
contextCert.pCertInfo.rgExtension[i].Value.pbData,
contextCert.pCertInfo.rgExtension[i].Value.cbData,
0,
0,
cbDecoded);

Память выделяю и т.д.

Но сталкиваюсь с такой проблемой.

Допустим мы хотим декодировать расширение Extended Key Usage.
Можем получить его так:
Цитата:
contextCert : PCCert_Context
Usage : PCERT_ENHKEY_USAGE
Size, cbDecoded : dword.
pbDecoded : PVOID;
usage : PCERT_ENHKEY_USAGE;

CertGetEnhancedKeyUsage(contextCert, 0, usage, size);

Соответственно получаем size=72, usage=$773530.
Декодируем потом расширения из массива успешно.

Но если взять другую функцию и попробовать ей декодировать из контекста сертификата (не запроса на сертификат).
Цитата:
CryptDecodeObject(contextCert.dwCertEncodingType, szOID_ENHANCED_KEY_USAGE, contextCert.pCertInfo.rgExtension[i].Value.pbData,
contextCert.pCertInfo.rgExtension[i].Value.cbData,
CRYPT_DECODE_NOCOPY_FLAG, pbDecoded, cbDecoded);

Привожу так:
Цитата:
PCERT_ENHKEY_USAGE (pbDecoded)

То в pbDecoded будет лежать = $76C158, а размер будет cbDecoded=96
И соответственно преобразования не получаются.

Там (CryptDecodeObject(..szOID_ENHANCED_KEY_USAGE..)) и там (CertGetEnhancedKeyUsage) должна же получаться одна структура на выходе?
В первом случае даже оидов не видно (

Отредактировано пользователем 12 декабря 2012 г. 16:40:58(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#2 Оставлено : 12 декабря 2012 г. 18:06:15(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
CryptDecodeObject для szOID_ENHANCED_KEY_USAGE 2 раза вызываете?
Техническую поддержку оказываем тут
Наша база знаний
Offline MCR  
#3 Оставлено : 12 декабря 2012 г. 18:48:50(UTC)
MCR

Статус: Активный участник

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

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах
Kirill Sobolev написал:
CryptDecodeObject для szOID_ENHANCED_KEY_USAGE 2 раза вызываете?

Да, Кирилл. В первый раз получаю размер. Второй раз значение. Без ex - просто CryptDecodeObject.
Offline Kirill Sobolev  
#4 Оставлено : 12 декабря 2012 г. 19:27:30(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
И индекс i правильный?
Техническую поддержку оказываем тут
Наша база знаний
Offline MCR  
#5 Оставлено : 12 декабря 2012 г. 19:42:45(UTC)
MCR

Статус: Активный участник

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

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах
Kirill Sobolev написал:
И индекс i правильный?

Макс индекс contextCert.pCertInfo.cExtension-1. первый 0

В цикле выставлено условие сравнения с оидом.
В этом случае с szOID_ENHANCED_KEY_USAGE.

Даже более того вижу в обоих случаях:
cUsageIdentifier=3

Только rgpszUsageIdentifier различны.

Отредактировано пользователем 12 декабря 2012 г. 20:16:57(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#6 Оставлено : 12 декабря 2012 г. 20:54:38(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
Только rgpszUsageIdentifier различны.

Это указатели же, имеют право отличаться.
Если cUsageIdentifier правильный, то что не работает?
Техническую поддержку оказываем тут
Наша база знаний
Offline MCR  
#7 Оставлено : 13 декабря 2012 г. 14:54:07(UTC)
MCR

Статус: Активный участник

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

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах
Kirill Sobolev написал:
Цитата:
Только rgpszUsageIdentifier различны.

Это указатели же, имеют право отличаться.
Если cUsageIdentifier правильный, то что не работает?

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

Кроме 1-ого расширения SubjectTool.
Для функции
CryptDecodeObject(
contextUserCert.dwCertEncodingType,
contextUserCert.pCertInfo.rgExtension[i].pszObjId,
contextUserCert.pCertInfo.rgExtension[i].Value.pbData,
contextUserCert.pCertInfo.rgExtension[i].Value.cbData,
0,
0,
&cbDecoded);
contextUserCert.pCertInfo.rgExtension[i].pszObjId = 1.2.643.100.111
Длина возвращается = 0.
В WincryptEx нет описания этой структуры, хотя там лежит UTF8String, как и нет гуида для функции CryptDecodeObject.

Это расширение нужно декодировать по особенному?
Offline Kirill Sobolev  
#8 Оставлено : 13 декабря 2012 г. 15:04:19(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
В WincryptEx нет описания этой структуры, хотя там лежит UTF8String, как и нет гуида для функции CryptDecodeObject

Так и используйте X509_NAME_VALUE, на выходе получится CERT_NAME_VALUE.
Техническую поддержку оказываем тут
Наша база знаний
Offline MCR  
#9 Оставлено : 14 декабря 2012 г. 12:43:36(UTC)
MCR

Статус: Активный участник

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

Сказал(а) «Спасибо»: 57 раз
Поблагодарили: 11 раз в 8 постах
Kirill Sobolev написал:
Цитата:
В WincryptEx нет описания этой структуры, хотя там лежит UTF8String, как и нет гуида для функции CryptDecodeObject

Так и используйте X509_NAME_VALUE, на выходе получится CERT_NAME_VALUE.

Еще раз, Спасибо, Кирилл.
Декодирование по описанному Вами алгоритму проходит успешно. Dancing

Отредактировано пользователем 14 декабря 2012 г. 12:44:07(UTC)  | Причина: Не указана

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