Проблема с Winhttp SSL под Windows 10

#c #windows #ssl #winhttp

#c #Windows #ssl #winhttp

Вопрос:

В настоящее время я пытаюсь реализовать soap-клиент под 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, amp;dwOpt, sizeof(dwOpt));
  

Спасибо

Ответ №1:

Я уже нашел, что там происходило. Оказывается, что флаги безопасного протокола не ведут себя одинаково в 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, amp;dwOpt, sizeof(dwOpt));
  

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