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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Jin  
#1 Оставлено : 28 февраля 2011 г. 18:40:38(UTC)
Jin

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

Группы: Участники
Зарегистрирован: 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);

Если кто знает в чём может быть проблема. или может кто кинет готовый работающий код?
Offline Kirill Sobolev  
#2 Оставлено : 28 февраля 2011 г. 19:25:51(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
(LPVOID)&cert

В этом, нужен просто PCCERT_CONTEXT.
Цитата:
MSDN
The lpBuffer parameter must be a pointer to a CERT_CONTEXT structure and not a pointer to a CERT_CONTEXT pointer.
Техническую поддержку оказываем тут
Наша база знаний
Offline Jin  
#3 Оставлено : 28 февраля 2011 г. 19:48:24(UTC)
Jin

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

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

&cert была опечатка, пробовал и так и просто cert. Всё равно не работало.

Нашёл что не так, надо воспользоваться функцией не MFC'шной т.е. InternetSetOption(...)

и всё заработало!!!

P.S. CHttpFile *chf=...

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