WinhttpSetoption()失败设置TLSV1.2,带有错误代码错误_internet_incorrect_ha



我尝试使用上述cpprest API调用从C (WIN)代码设置TLSv1.1 or v1.2。但是WinHttpSetOption()失败了,错误ERROR_INTERNET_INCORRECT_HANDLE_TYPE(12018)。

OS:Windows(7/8)

  1. 尝试从注册表设置设置TLSV1.1和TLS1.2不起作用。
  2. 尝试获取OpenSll,但opensll1.0.1(支持TLS1.1及以上)无法使用Windows。
  3. 试图获得本机句柄以外的其他方法没有找到API
auto func = [&](web::http::client::native_handle handle){
    BOOL win32Result{ FALSE };
    DWORD secure_protocols{ WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1
        | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 };
    win32Result = ::WinHttpSetOption(handle,
        WINHTTP_OPTION_SECURE_PROTOCOLS,
        &secure_protocols,
        sizeof(secure_protocols));
    if (FALSE == win32Result) {
        std::cout << "Can not set TLS 1.1 or TLS 1.2." << std::endl;
        auto err = GetLastError();
        CString cstr;
        cstr.Format(_T("err = %d"),err);
        AfxMessageBox(cstr);
    }
};
config.set_validate_certificates(false);
config.set_nativehandle_options(func);

请帮助我使用C REST API设置TLSV1.1或V1.2。或者如何使WinHttpSetOption()成功。

使用winhttpopen我们可以获得"会话句柄",可以将其传递给winhttpsetoption()。这解决了错误" error_internet_incorrect_handle_type"。

HINTERNET hSession = WinHttpOpen(L"<Application name>",
    WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
    WINHTTP_NO_PROXY_NAME,
    WINHTTP_NO_PROXY_BYPASS, 0);

尽管我将TLS版本设置为1.2/1.1。仍然我的" http_request"使用的是Windows 7/8.1中默认的TLSV1.0。(可以使用Wireshark确认)

任何人都可以让我知道为什么仍使用TLS1.0的" http_request"。

请尝试安装此更新:

https://support.microsoft.com/en-gb/topic/update-to-enable-tls-tls-1-1-1-1-1-1-1-1-1-1-1-2-as-1-2-as-default-secure-cure-protocols-in-winhttp-in-Windows-C4BD73D2-31D7-761E-0178-11268BB10392

'此更新提供了对运输层安全性(TLS)1.1和TLS 1.2的支持>

相关内容

  • 没有找到相关文章

最新更新