![](/img/trans.png)
[英]How to handle QSslSocket: cannot resolve TLSv1_1_client_method error
[英]WinHttpSetOption() failed set TLSv1.2 with error code ERROR_INTERNET_INCORRECT_HANDLE_TYPE
我正在嘗試使用前面提到的cpprest
API 調用從 C++ (Win) 代碼設置TLSv1.1 or v1.2
。 但是WinHttpSetOption()
失敗並出現錯誤ERROR_INTERNET_INCORRECT_HANDLE_TYPE
(12018)。
操作系統:Windows(7/8)
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”仍然使用 TLSv1.0,這是 Windows 7/8.1 中的默認值。(這可以使用wireshark 確認)
任何人都可以讓我知道為什么“http_request”仍在使用 TLS1.0.
請嘗試安裝此更新:
“此更新為 Windows Server 2012、Windows 7 Service Pack 1 (SP1) 和 Windows Server 2008 R2 SP1 中的傳輸層安全性 (TLS) 1.1 和 TLS 1.2 提供支持。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.