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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline zer0c14  
#1 Оставлено : 12 сентября 2014 г. 11:35:37(UTC)
zer0c14

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

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

Сказал «Спасибо»: 4 раз
При разборе CERT_ALT_NAME_OTHER_NAME, получаю необходимую строку - но с двумя ведущими лишними байтами. Спасибо)

Код:

if (!CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_SUBJECT_ALT_NAME2,
        data, data_len, 0, NULL, &struct_info_len)) {
    RETURN_FALSE;
}
void *struct_info = emalloc(struct_info_len);
if (!CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, szOID_SUBJECT_ALT_NAME2,
        data, data_len, 0, struct_info, &struct_info_len)) {
    RETURN_FALSE;
}
PCERT_ALT_NAME_INFO cert_alt_name_info = struct_info;
while(cert_alt_name_info->cAltEntry-- > 0) {
    CERT_ALT_NAME_ENTRY cert_alt_name_entry = cert_alt_name_info->rgAltEntry[cert_alt_name_info->cAltEntry];
    if (cert_alt_name_entry.dwAltNameChoice == CERT_ALT_NAME_OTHER_NAME) {
        // и вот здесь два результат с двумя ведущими некорректными байтами
        // [0C 26] D0 9E D0 90 D0 9E
        // [0C 2E] D0 A1 D0 B5 D1 81
        // cert_alt_name_entry._empty_union_.pOtherName->Value.pbData
    }
}
Offline Максим Коллегин  
#2 Оставлено : 12 сентября 2014 г. 12:33:39(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 721 раз в 625 постах
это asn1 кодированная строка, ее нужно декодировать.
Знания в базе знаний, поддержка в центре поддержки
Offline Максим Коллегин  
#3 Оставлено : 12 сентября 2014 г. 12:35:24(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 721 раз в 625 постах
http://habrahabr.ru/post/150820/

Цитата:
Тип UTF8String (класс тэга UNIVERSAL, номер тэга 12, форма кодирования — примитивная). Представление символов Unicode, но с дополнительной обработкой, позволяющей кодировать каждый символ в последовательность байт переменной длины (от 1 до 7-ми байт).
Знания в базе знаний, поддержка в центре поддержки
Offline zer0c14  
#4 Оставлено : 12 сентября 2014 г. 13:46:35(UTC)
zer0c14

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

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

Сказал «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
это asn1 кодированная строка, ее нужно декодировать.

я так понимаю следующий код корректен для этой задачи?

Код:

DWORD cbDecoded = 0;
CryptDecodeObject(
    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
    X509_OCTET_STRING,
    cert_alt_name_entry._empty_union_.pOtherName->Value.pbData,
    cert_alt_name_entry._empty_union_.pOtherName->Value.cbData,
    0,
    NULL,
    &cbDecoded
);

LPVOID pbDecoded = emalloc(cbDecoded);
CryptDecodeObject(
    X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
    X509_OCTET_STRING,
    cert_alt_name_entry._empty_union_.pOtherName->Value.pbData,
    cert_alt_name_entry._empty_union_.pOtherName->Value.cbData,
    0,
    pbDecoded,
    &cbDecoded
);
PCRYPT_DATA_BLOB pDataBlob = (PCRYPT_DATA_BLOB) pbDecoded;
// pDataBlob->pbData
// pDataBlob->cbData
Offline Максим Коллегин  
#5 Оставлено : 12 сентября 2014 г. 14:53:15(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 721 раз в 625 постах
X509_ANY_STRING
Знания в базе знаний, поддержка в центре поддержки
Offline zer0c14  
#6 Оставлено : 12 сентября 2014 г. 17:11:39(UTC)
zer0c14

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

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

Сказал «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
X509_ANY_STRING

все ок. только остался один вопрос - при использовании X509_OCTET_STRING строка в UTF-8, при использовании X509_ANY_STRING и CertRDNValueToStr получаю строку в Windows-1251?
Offline Максим Коллегин  
#7 Оставлено : 12 сентября 2014 г. 17:16:14(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 721 раз в 625 постах
Да.
Знания в базе знаний, поддержка в центре поддержки
Offline zer0c14  
#8 Оставлено : 12 сентября 2014 г. 17:32:45(UTC)
zer0c14

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

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

Сказал «Спасибо»: 4 раз
Автор: zer0c14 Перейти к цитате
Автор: maxdm Перейти к цитате
X509_ANY_STRING

все ок. только остался один вопрос - при использовании X509_OCTET_STRING строка в UTF-8, при использовании X509_ANY_STRING и CertRDNValueToStr получаю строку в Windows-1251?

а в utf-8 можно как-то сразу получить, чтобы отдельно не переводить? и если не сложно - какой-то особенный смысл возвращения windows-1251 есть (оно вроде в asn1 как utf8, ради повышения образованности). и спасибо за помощь)
Offline Максим Коллегин  
#9 Оставлено : 12 сентября 2014 г. 17:41:18(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 721 раз в 625 постах
X509_ANY_STRING разве не UTF8 вернет?
Знания в базе знаний, поддержка в центре поддержки
Offline zer0c14  
#10 Оставлено : 12 сентября 2014 г. 19:11:39(UTC)
zer0c14

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

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

Сказал «Спасибо»: 4 раз
Автор: maxdm Перейти к цитате
X509_ANY_STRING разве не UTF8 вернет?

CryptDecodeObject(.., X509_ANY_STRING, ...) заполнит PCERT_NAME_VALUE(DWORD dwValueType, CERT_RDN_VALUE_BLOB Value), и чтобы извлечь из него значение я прогоняю его через CertRDNValueToStr(...), который вернет уже значение в Windows-1251. А надо получить значение в UTF-8.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.