Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
HTTPS Two Way Проблема с Клиентским сертификатом WinInet функций
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2009(UTC) Сообщений: 119 Откуда: Moscow
|
Добрый День. Использую функции класса CHttpFile, CInternetSession для взаимодействия с сервером по HTTPS, односторонняя связь ( только с сертификатом сервера) получилась. А вот двух сторонняя никак не получается, код примерно следующий:
CInternetSession cis; CHttpConnection *chc=cis.GetHttpConnection(L"Тут Адрес сервера",(INTERNET_PORT)port); CHttpFile *chf=chc->OpenRequest(CHttpConnection::HTTP_VERB_GET,L"/1.txt",0,1,0,0,INTERNET_FLAG_SECURE); // Запрашиваю файл 1.txt который лежит на сервере
try{ // Тут посылаю данные chf->SendRequest(); } catch(CInternetException *exp) { DWORD dwError = exp->m_dwError; // Тут оказывается что ошибка - ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED, т.е. требуется клиентский сертификат - это нормально // Теперь выбираю сертификат, по идеи всё должно сработать PCCERT_CONTEXT cert=SelectCert(...); // Функция выбора сертификата с рутокена, ссылка на закрытый ключ присутствует, проверял if(cis.SetOption(INTERNET_OPTION_CLIENT_CERT_CONTEXT,(LPVOID)&cert,sizeof(CERT_CONTEXT),(DWORD)0)==TRUE) { // До сюда не дохожу, SetOption возвращает FALSE, и всё тот же код ошибки chf->SendRequest(); } }
// Считываю код состояния ответа chf->QueryInfoStatusCode(dwAnswerStatus);
Если кто знает в чём может быть проблема. или может кто кинет готовый работающий код?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
В этом, нужен просто PCCERT_CONTEXT. Цитата:MSDN The lpBuffer parameter must be a pointer to a CERT_CONTEXT structure and not a pointer to a CERT_CONTEXT pointer.
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2009(UTC) Сообщений: 119 Откуда: Moscow
|
&cert была опечатка, пробовал и так и просто cert. Всё равно не работало.
Нашёл что не так, надо воспользоваться функцией не MFC'шной т.е. InternetSetOption(...)
и всё заработало!!!
P.S. CHttpFile *chf=...
необходимо передавать в функцию InternetSetOption ( *chf , ...) ; // Оказывается у них переопределена операция!
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
HTTPS Two Way Проблема с Клиентским сертификатом WinInet функций
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close