Win7上的WinHTTP WINHTTP WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR

时间:2018-12-30 07:51:50

标签: ssl https windows-7 tls1.2 winhttp

我已经在这个问题上b了几个星期。我知道这不是我的代码,因为相同的代码在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),但无济于事。

我还尝试通过在标志中使用INTERNET_DEFAULT_HTTP_PORT而不是HTTPS来禁用SSL,以进行WinHttpConnect调用,但也没有成功。

但是,如果我在浏览器中转到要连接的URL,则该URL可以通过https连接而没有问题。

有什么想法吗?

0 个答案:

没有答案