winhttp WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR

时间:2017-11-19 03:49:04

标签: c++ rest sdk winhttp

我正在使用Casablanka Rest SDK和Visual C ++ 2015. Casablanka SDK基于winhttp。每当通过SSL发送请求时,都会收到异常。例外是:

“SSL错误:WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR内部错误。”

问题仅出在Windows 2008 R2服务器上。我的笔记本电脑运行Windows 10和Windows 2012服务器都没问题。

从Windows 2008浏览启用SSL的网站没有任何问题。但是,我的应用程序无法正常工作,并因上述错误而失败。

感谢任何帮助:)

只需添加winhttp跟踪:

“23:24:31.228 :: usr-req 003B2A60收到OnTcpConnected回调 23:24:31.244 ::异步I / O操作完成(重叠= 00397790,#bytes / info = 0,错误= SEC_E_INVALID_TOKEN(-2146893048)) 23:24:31.244 :: sys-sender处理HttpSendHttpRequest完成(error-cdoe = SEC_E_INVALID_TOKEN(0x80090308),#times = 0,overlapped = 00397790) 23:24:31.244 :: sys-sender未通过请求;错误= SEC_E_INVALID_TOKEN(-2146893048) 23:24:31.244 :: ERROR_WINHTTP_FROM_WIN32已映射(SEC_E_INVALID_TOKEN)-2146893048至(ERROR_WINHTTP_SECURE_FAILURE)12175“

1 个答案:

答案 0 :(得分:2)

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));

我希望这可以帮助一些人面对同样的问题。