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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Jin  
#1 Оставлено : 2 марта 2011 г. 22:03:20(UTC)
Jin

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

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

Добрый день!
Пожалуйста помогите с такой проблемой:

Создаю two-way tls соединение с сервером при помощи Win32 Api Функций: InternetOpen,InternetConnect,HttpOpenRequest и т.д. и у меня происходит следующая ошибка.

Код ниже при повторном вызове почему то работает некорректно:

HINTERNET hi=InternetOpen(...);
HINTERNET hc=0,hr=0;

hc=InternetConnect(hi,/*Параметры сервера адрес, и порт*/);
hr=HttpOpenRequest(hc,/*Указываю что соединение SECURE*/);

// Теперь устанавливаю сертификат клиента
InternetSetOptionW(hr,INTERNET_OPTION_CLIENT_CERT_CONTEXT,(LPVOID *)cert,sizeof(CERT_CONTEXT));

// Посылаю запрос а сервер
bres=HttpSendRequest(hr,NULL,0,NULL,0);


// Проверяем ответ
DWORD code=0;
HttpQueryInfo(hr,HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER ,&code,&len,NULL);


if(code!=200)
{
// Закрываем соединение ...
return;
}

//... Тут идёт считывает контента ответа и т.д.


//Close
InternetCloseHandle(hr);
InternetCloseHandle(hc);
InternetCloseHandle(hi);



Дело в том что при первом вызове всё отрабатывает корректно, на сервер приходит запрос, тамже проверяется сертификат клиента и он такой какой я указал на клиенте,
однако если данные код вызвать повторно ( не закрывая приложение ) и указать другой сертификат, то на сервере показывается что соединение созданно при
помощи сертификата клиента который был указан при первом исполнении данного кода, и повидимому само соединение действительно создаётся с участием именно первого
сертификата а не второго как должно быть на самом деле.
Т.е. такое ощущение что данные функции гдето записывают первый указанный сертификат и продолжают его использовать..
или это ошибка функций WinInet

Почему такое может быть?

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

Offline Jin  
#2 Оставлено : 5 марта 2011 г. 15:04:10(UTC)
Jin

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

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

Разобрался. для того чтобы сертификат сбрасывался необходимо после закрытия всех HINTERNET хэндлов, вызвать функцию InternetSetOption со следующими параметрами:

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