我正在使用带有Visual C++ 2015的Casablanka Rest SDK。Casablanka SDK基于winhttp。只要通过SSL发送请求,就会收到异常。例外情况是:
"SSL错误: WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR内部错误。“
问题只出现在Windows2008 R2服务器上。我的运行Windows 10和Windows 2012服务器的笔记本电脑运行正常。
从Windows 2008浏览启用了SSL的网站没有任何问题。但是,我的应用程序就是不能工作,并且会失败,并出现上述错误。
如有任何帮助,我们将非常感谢:)
只需添加winhttp跟踪:
"23:24:31.228 ::usr-req 003B2A60收到OnTcpConnected回调23:24:31.244 ::异步I/O操作完成(overlapped = 00397790,#bytes/info = 0,error = SEC_E_INVALID_TOKEN (-2146893048)) 23:24:31.244::sys-发送方处理HttpSendHttpRequest完成(error-cdoe = SEC_E_INVALID_TOKEN (0x80090308),#bytes = 0,overlapped = 00397790) 23:24:31.244::sys-发送方请求失败;错误= SEC_E_INVALID_TOKEN ( -2146893048 ) 23:24:31.244 ::ERROR_WINHTTP_FROM_WIN32映射(SEC_E_INVALID_TOKEN) -2146893048到(ERROR_WINHTTP_SECURE_FAILURE) 12175“
发布于 2017-11-20 21:59:11
Windows 2008无法协商TLS 1.2。因此,我降级了Rest SDK (cpprestsdk\Release\src\http\client\http_client_winhttp.cpp).中的协议
更改:
DWORD secure_protocols = WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1;
if (IsWindowsVersionOrGreater(6, 3, 0)) {
secure_protocols += WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
}
win32_result = ::WinHttpSetOption(m_hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, &secure_protocols, sizeof(secure_protocols));
我希望这对一些面临同样问题的人有所帮助。
https://stackoverflow.com/questions/47373513
复制相似问题