WinHTTP WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR на Win7 - PullRequest
0 голосов
/ 30 декабря 2018

Я ломал голову над этой проблемой уже пару недель.Я знаю, что это не мой код, потому что тот же код отлично работает на моем ноутбуке с Win10, но всегда терпит неудачу на Win7.

hSess = WinHttpOpen(NULL, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, NULL);
if (hSess)
    hConn = WinHttpConnect(hSess, web_server, (ssl == true ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT), NULL);
else
    retcode = -1;
if (hConn)
    hReq = WinHttpOpenRequest(hConn, NULL, object, NULL, WINHTTP_NO_REFERER, accepted_types, (ssl == true ? WINHTTP_FLAG_SECURE : NULL));
else
    retcode = -1;

DWORD sec = WINHTTP_FLAG_SECURE_PROTOCOL_ALL | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
WinHttpSetOption(hReq, WINHTTP_OPTION_SECURE_PROTOCOLS, &sec, sizeof(sec));

WinHttpSetStatusCallback(hReq, _WinhttpStatusCallback, WINHTTP_CALLBACK_FLAG_SECURE_FAILURE, NULL);

if (hReq)
    res = WinHttpSendRequest(hReq, WINHTTP_NO_ADDITIONAL_HEADERS, NULL, WINHTTP_NO_REQUEST_DATA, NULL, NULL, NULL);
else
    retcode = -1;

Приведенный выше код завершается ошибкой при вызове WinHttpSendRequest.Флаг, возвращаемый GetLastError, имеет значение ERROR_WINHTTP_SECURE_FAILURE, а флаг информации о состоянии WinHttpStatusCallback - WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR.

Я проверил настройки реестра для TLS и SSL, и все они верны.Я также запустил обновление для Win7 (найдено здесь: https://support.microsoft.com/en-au/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi), но безрезультатно.

Я также попытался отключить SSL с помощью INTERNET_DEFAULT_HTTP_PORT в моем флаге вместо HTTPS для вызова WinHttpConnect, но безуспешнолибо.

Однако, если я перехожу по URL-адресу, к которому пытаюсь подключиться, в моем браузере, он без проблем подключается к https.

Есть идеи?

...