#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));
Я надеюсь, что это поможет всем, кто борется с подобными проблемами.