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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline nikeo  
#1 Оставлено : 3 июня 2013 г. 9:40:46(UTC)
nikeo

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

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

Добрый день!

В программе по созданию сертификата,нужно добавлять использование ключа,как я понял, необходимо заполнить cExtension и rgExtension в структура CERT_INFO.
Так вопрос заключается в том - как составить структуру типа CERT_EXTENSIONS, чтобы она включала все возможные применения и как сделать это корректно(под корректно я имею ввиду наличие каких то функций типа cryptEncodeObject)? какой OID нужно ей передать?

У меня получилось только за счет создания массива типа BYTE ext[4]={{0x03},{0x02},{0x04},{0x40}};, в котором последнии два значения меняют киличество и само использование.

Хотелось бы найти что то более логичное,да и узнать,за что отвечают первые два значениия?
Offline Юрий  
#2 Оставлено : 3 июня 2013 г. 10:10:27(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
//--- KeyUsage
CRYPT_BIT_BLOB key_usage;
ZeroMemory( &key_usage, sizeof(CRYPT_BIT_BLOB) );

BYTE ByteKeyUsage = 0xFF;

key_usage.cbData=1;
key_usage.pbData=&ByteKeyUsage;

ext[ ++ext_number ].fCritical = TRUE;
ext[ ext_number ].pszObjId = "2.5.29.15";

if(!CryptEncodeObjectEx(X509_ASN_ENCODING,X509_KEY_USAGE, &key_usage, CRYPT_ENCODE_ALLOC_FLAG, NULL,&ext[ ext_number ].Value.pbData, &ext[ ext_number ].Value.cbData))
{
Error(L"CryptEncodeObject");
return S_FALSE;
}

А про массив BYTE - сертификат кодируется в формате ASN.1. Подробнее про ASN.1 можно почитать например в моей статье ASN.1 простыми словами.

Отредактировано пользователем 3 июня 2013 г. 10:11:02(UTC)  | Причина: Не указана

С уважением,
Юрий Строжевский
Offline nikeo  
#3 Оставлено : 3 июня 2013 г. 11:09:59(UTC)
nikeo

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

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

большое спасибо!вот только подскажите какого типа у вас ext?а то компилятор ругается,когда я добавляю OID,у меня это структура CERT_EXTENSIONS.
Offline nikeo  
#4 Оставлено : 3 июня 2013 г. 11:20:55(UTC)
nikeo

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

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

Все спасибо,проблема решилась)
Offline Юрий  
#5 Оставлено : 3 июня 2013 г. 12:34:34(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Автор: nikeo Перейти к цитате
Все спасибо,проблема решилась)

Вот, другое дело! Молодец, не то что в этой теме.
С уважением,
Юрий Строжевский
Offline nikeo  
#6 Оставлено : 6 июня 2013 г. 8:48:40(UTC)
nikeo

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

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

Юрий,а по возможности не подскажете так же для расширенного использования ключа?
Offline nikeo  
#7 Оставлено : 6 июня 2013 г. 8:51:47(UTC)
nikeo

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

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

Ахах))да,интересные люди бывают)))получается и знают все и ничего не получается)

Я как понял,для расширенного тоже самое примерно,только флаг и OID другой?
Offline Юрий  
#8 Оставлено : 6 июня 2013 г. 9:21:07(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
//--- Extended KeyUsage (должны встречатся только в пользовательских сертификатах)
CERT_ENHKEY_USAGE enh_key_usage;
ZeroMemory(&enh_key_usage, sizeof(CERT_ENHKEY_USAGE ));

LPSTR enh_key_array[1] = {"1.3.6.1.4.1.311.10.3.4"};

enh_key_usage.cUsageIdentifier = 1;
enh_key_usage.rgpszUsageIdentifier = enh_key_array;

ext[ ++ext_number ].fCritical = FALSE;
ext[ ext_number ].pszObjId = "2.5.29.37";

if(!CryptEncodeObjectEx(X509_ASN_ENCODING, X509_ENHANCED_KEY_USAGE, &enh_key_usage, CRYPT_ENCODE_ALLOC_FLAG, NULL, &ext[ ext_number ].Value.pbData, &ext[ ext_number ].Value.cbData))
{
Error(L"CryptEncodeObject");
return S_FALSE;
}

А в общем случае OID надо искать вот так, а потом вот так.
С уважением,
Юрий Строжевский
Offline nikeo  
#9 Оставлено : 6 июня 2013 г. 9:56:07(UTC)
nikeo

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

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

Огромное спасибо!!!
Offline nikeo  
#10 Оставлено : 6 июня 2013 г. 14:42:38(UTC)
nikeo

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

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

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