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

Уведомление

Icon
Error

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

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

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

Добрый день!

у меня есть функция, которая перечисляет список урлов в CDP, но в одном сертификате она дает сбой и программа вылетает. Я не знаток си++, на форумах спрашивал можно ли проверить переменную на предмет некорректного адреса - говорят, что нельзя...

Ниже представлен фргмент, который работает в принципе, но для одного сертификата вылетает. Вопрос в том, можно ли поставить какую-нибудь дополнительную проверку перед тем как попытаться получить очередной URL

Цитата:
PCERT_EXTENSION pCe = CertFindExtension(szOID_CRL_DIST_POINTS, pCertInfo->cExtension, pCertInfo->rgExtension);
if (pCe) {
PCRL_DIST_POINTS_INFO pCrlDistPointsInfo = NULL;
PCRL_DIST_POINT *pCrlDistPointsPtr = NULL;
PCRL_DIST_POINT pCrlDistPoints = NULL;
DWORD pdwCrlDistPoints = sizeof (CRL_DIST_POINTS_INFO);

if (!CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
szOID_CRL_DIST_POINTS,
pCe->Value.pbData,
pCe->Value.cbData,
CRYPT_DECODE_ALLOC_FLAG,
(PCRYPT_DECODE_PARA) NULL,
&pCrlDistPointsInfo,
&pdwCrlDistPoints)) {
printf("\n\nCannot decode CRL URL.\n\n");
}

if (pCrlDistPointsInfo) {

pCrlDistPointsPtr = (PCRL_DIST_POINT*) pCrlDistPointsInfo->rgDistPoint;

if (pCrlDistPointsPtr && pCrlDistPointsInfo->cDistPoint > 0) {

findCDP = true;
fwprintf(pFile, L"^^");
for (int i = 0; i < pCrlDistPointsInfo->cDistPoint; i++) {

pCrlDistPoints = &pCrlDistPointsInfo->rgDistPoint[i];

if (pCrlDistPoints) {

LPWSTR str = (LPWSTR) pCrlDistPoints->DistPointName._empty_union_.FullName.rgAltEntry->_empty_union_.pwszURL;



fwprintf(pFile, str);//ТУТ ВЫЛЕТАЕТ, в дебаге при выводе переменной str ошибка "0x2e (Address 0x2e out of bounds)"
fwprintf(pFile, L";");

}
printf("%d\n",i);
}

}

free(pCrlDistPointsInfo);
}
}
Вложение(я):
113.cer (1kb) загружен 3 раз(а).

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline Андрей Писарев  
#2 Оставлено : 17 декабря 2012 г. 16:47:33(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
В приложенной сертификате нет адреса (URL) в CDP + к тому же это корневой сертификат

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

Техническую поддержку оказываем тут
Наша база знаний
Offline mgurov  
#3 Оставлено : 17 декабря 2012 г. 16:51:05(UTC)
mgurov

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

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

Андрей * написал:
В приложенной сертификате нет адреса (URL) в CDP + к тому же это корневой сертификат



тем не менее, в цикл все равно заходит почему то ... вопрос в том как этого избежать
Offline Андрей Писарев  
#4 Оставлено : 17 декабря 2012 г. 16:54:16(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
mgurov написал:
Андрей * написал:
В приложенной сертификате нет адреса (URL) в CDP + к тому же это корневой сертификат



тем не менее, в цикл все равно заходит почему то ... вопрос в том как этого избежать


Потому что нет проверки... после
Цитата:

if (pCrlDistPoints) {


DistPointName.FullName.cAltEntry - кол-во элементов - нужно их также перебрать в цикле..

Цитата:
первый цикл: pCrlDistPointsInfo ... cDistPoint кол-во точек CDP
вложенный цикл: CrlDistPoints[i].DistPointName.FullName ... cAltEntry - кол-во адресов (URL) у точки CDP[i]
далее работаем с CDP[i]...array[j].pwszURL

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

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

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

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

спасибо большое, вроде разобрался.
Offline Андрей Писарев  
#6 Оставлено : 17 декабря 2012 г. 18:06:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
mgurov написал:
спасибо большое, вроде разобрался.


http://www.cryptopro.ru/...ro/forum/view.asp?q=3101

Техническую поддержку оказываем тут
Наша база знаний
Offline mgurov  
#7 Оставлено : 17 декабря 2012 г. 18:09:13(UTC)
mgurov

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

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

Андрей * написал:
mgurov написал:
спасибо большое, вроде разобрался.


http://www.cryptopro.ru/...ro/forum/view.asp?q=3101



в том примере нет вложенного цикла, это то же самое что было у меня изначально и это не работает когда нет CDP
Offline Андрей Писарев  
#8 Оставлено : 17 декабря 2012 г. 18:13:14(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
mgurov написал:
Андрей * написал:
mgurov написал:
спасибо большое, вроде разобрался.


http://www.cryptopro.ru/...ro/forum/view.asp?q=3101



в том примере нет вложенного цикла, это то же самое что было у меня изначально и это не работает когда нет CDP


там "на тему" про несколько точек и соответствующих адресов у каждой... в принципе - все есть в MSDN
CRL_DIST_POINTS_INFO

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

Техническую поддержку оказываем тут
Наша база знаний
Offline mgurov  
#9 Оставлено : 17 декабря 2012 г. 18:47:08(UTC)
mgurov

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

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

всетаки ошибка осталась,

pCrlDistPoints->DistPointName._empty_union_.FullName.cAltEntry для этого сертификата дает единицу, а не ноль, как должно быть. Видимо, ошибка в криптопро...
Offline Андрей Писарев  
#10 Оставлено : 17 декабря 2012 г. 18:55:39(UTC)
Андрей *

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

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

Сказал «Спасибо»: 555 раз
Поблагодарили: 2252 раз в 1757 постах
mgurov написал:
всетаки ошибка осталась,

pCrlDistPoints->DistPointName._empty_union_.FullName.cAltEntry для этого сертификата дает единицу, а не ноль, как должно быть. Видимо, ошибка в криптопро...


Причем здесь КриптоПРО?
+ Сертификат на базе RSA, КриптоПРО CSP здесь вообще не участвует. Anxious


P.s. в моем софте с этим сертификатом нормально все - "не падает", CRL URL кол-во = 0

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

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