在Windows

时间:2019-07-05 10:33:18

标签: c++ ssl boost boost-asio cpprest-sdk

我想在上下文中添加一些TLS规范,因此我正在使用set_ssl_context_callback
但是我收到错误消息“ set_ssl_context_callback不是web :: http :: client :: http_client_config的成员”,因为它被:

包围了
#if !defined(_WIN32) && !defined(__cplusplus_winrt)

如何禁用这些标志?

有没有解决方法?我正在使用Visual Studio2017。(15.6.7)

http_client_config config;
        config.set_ssl_context_callback([](boost::asio::ssl::context &context){
            context.set_options(boost::asio::ssl::context::no_sslv2
                | boost::asio::ssl::context::no_sslv3
                | boost::asio::ssl::context::no_tlsv1
                | boost::asio::ssl::context::no_tlsv1_1);
        });
        http_client raw_client(SessionData::get_instance().GetServerUrl(), config);

我收到以下错误“ set_ssl_context_callback不是web :: http :: client :: http_client_config的成员”

1 个答案:

答案 0 :(得分:1)

此功能不适用于Windows,因为它已被禁用:

如果!defined(_WIN32)&&!defined(__ cplusplus_winrt)

在cpprest 2.10中使用以下内容代替:

    auto func = [&](native_handle handle) {
        BOOL win32Result = FALSE;
        DWORD secure_protocols = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
        win32Result = ::WinHttpSetOption(handle,
            WINHTTP_OPTION_SECURE_PROTOCOLS,
            &secure_protocols,
            sizeof(secure_protocols));
        if (FALSE == win32Result) {
            MessageBox(NULL, L"error", L"Failed to set minimum TLS option", MB_OK);
        }
        else
            MessageBox(NULL, L"error", L"Set minimum TLS option to Success", MB_OK);

    };

   config.set_nativesessionhandle_options(func)