代码之家  ›  专栏  ›  技术社区  ›  tuket

Asio SSL错误“握手:无可用协议”

  •  0
  • tuket  · 技术社区  · 6 年前

    我正在尝试使用Asio(独立版本)通过SSL连接到gmail。

    当我打电话的时候 handshake

    handshake: no protocols available
    

    代码如下:

    asio::ssl::context sslContext(asio::ssl::context::sslv3);
    sslContext.set_default_verify_paths();
    asio::io_context ioc;
    typedef asio::ip::tcp::socket Socket;
    asio::ssl::stream<Socket> socket(ioc, sslContext)
    auto endpointIt = resolver.resolve("smtp.gmail.com", to_string(465));
    asio::connect(socket.lowest_layer(), endpointIt);
    socket.lowest_layer().set_option(tcp::no_delay(true));
    socket.set_verify_mode(asio::ssl::verify_peer);
    socket.set_verify_callback(asio::ssl::rfc2818_verification(serverUrl));
    try{
        socket.handshake(SslSocket::client);
    }
    catch(const std::exception& e){
        cout << e.what() << endl;
    }
    

    我使用的是ubuntu18.04。

    1 回复  |  直到 6 年前
        1
  •  0
  •   tuket    6 年前

    设法解决它取代:

    sslContext.set_default_verify_paths();
    

    签署人:

    sslContext.add_verify_path("/etc/ssl/certs");
    

    虽然不便于携带,但至少现在可以用了。