Проблема с Winhttp SSL под Windows 10 - PullRequest
0 голосов
/ 25 марта 2019

В настоящее время я пытаюсь реализовать мыльный клиент под Windows на C ++. Из-за некоторых технических требований, http и коммуникационный уровень были реализованы с использованием Winhttp API. Кажется, все работает нормально, но, как только TLS 1.1 или 1.2 включены, программное обеспечение не может выполнить рукопожатие SSL. Он просто продолжает посылать пакеты TCP-соединений на сервер.

Я провел несколько тестов, чтобы выяснить, что происходит, и на данный момент это то, что я уже знаю:

  • Программное обеспечение работает в Windows 10 Pro должным образом (независимо от того, какая версия TLS выбрана). Этого нельзя сказать, когда программное обеспечение развернуто в Windows 10 ltsb 2016 (1607).

  • Включение поддержки TLS в соответствии с рекомендациями здесь не работает.

Код winhttp можно найти здесь . Я добавил эту модификацию только в строках 351-352:

 DWORD dwOpt =  WINHTTP_FLAG_SECURE_PROTOCOL_ALL | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 |WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
 int res = WinHttpSetOption(pData->hInternet, WINHTTP_OPTION_SECURE_PROTOCOLS, &dwOpt, sizeof(dwOpt));

Спасибо

1 Ответ

0 голосов
/ 26 марта 2019

Я уже нашел, что там происходит.Оказывается, флаги защищенного протокола не ведут себя одинаково в Windows 10 Pro и Windows 10 2016 ltsb.

Фрагмент кода, включенный в вопросы, работает должным образом в Windows 10 Pro, но в Windows 10 2016 ltsb это должно быть:

DWORD dwOpt = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 |WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
int res = WinHttpSetOption(pData->hInternet, WINHTTP_OPTION_SECURE_PROTOCOLS, &dwOpt, sizeof(dwOpt));

Надеюсь, это поможет любому, кто борется с подобнымвопросы.

...