我尝试使用上述cpprest
API调用从C (WIN)代码设置TLSv1.1 or v1.2
。但是WinHttpSetOption()
失败了,错误ERROR_INTERNET_INCORRECT_HANDLE_TYPE
(12018)。
OS:Windows(7/8)
- 尝试从注册表设置设置TLSV1.1和TLS1.2不起作用。
- 尝试获取OpenSll,但opensll1.0.1(支持TLS1.1及以上)无法使用Windows。
- 试图获得本机句柄以外的其他方法没有找到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的支持>