配置Microsoft C ++ Rest SDK以使用TLS 1.1或1.2

时间:2016-10-05 23:13:06

标签: c++ ssl

如何将用于http_client的Microsoft C ++ Rest SDK配置为使用TLS 1.1或1.2进行连接?它无法连接,因为它使用服务器不接受的较低级别的TLS。我没有看到如何配置它来设置客户端的TLS级别。

2 个答案:

答案 0 :(得分:3)

SDK没有TLS版本的设置。

在Windows上,该库基于WinHttp。因此,库使用WinHttp默认值,这在Windows版本之间有所不同。有关详细信息,请参阅Update to enable TLS 1.1 and TLS 1.2 as a default secure protocols in WinHTTP in Windows。如果默认值不可接受,您可以使用WinHttpSetOption自行更改WINHTTP_OPTION_SECURE_PROTOCOLS选项。

在Linux上,SDK使用boost :: asio :: ssl :: context :: sslv23,我认为它已经支持TLS 1.1和1.2。要进行精细控制,您可以调用SSL_CTX_set_options。

答案 1 :(得分:0)

Microsoft C ++ Rest在2.10及更高版本中支持TLS 1.1和1.2。这是http_client_winhttp.cpp中执行此操作的部分:

            // Enable TLS 1.1 and 1.2
#if !defined(CPPREST_TARGET_XP)
        BOOL win32_result(FALSE);

        DWORD secure_protocols(WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 |
                               WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2);
        win32_result = ::WinHttpSetOption(
            m_hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, &secure_protocols, sizeof(secure_protocols));
        if (FALSE == win32_result)
        {
            return GetLastError();
        }
#endif