Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2009(UTC) Сообщений: 119 Откуда: Moscow
|
Разобрался. для того чтобы сертификат сбрасывался необходимо после закрытия всех HINTERNET хэндлов, вызвать функцию InternetSetOption со следующими параметрами:
InternetSetOption(NULL, INTERNET_OPTION_END_BROWSER_SESSION , NULL,0);
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close