是否可以在boost :: asio中的非安全套接字上使用ssl套接字?

时间:2019-06-15 07:44:45

标签: c++ ssl curl boost boost-asio

我使用libcurl连接到服务器并获取非安全套接字。

curl_socket_t sock;
curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sock);

然后我使用boost :: asio与套接字一起工作。

boost::asio::ip::tcp::socket ba_sock;   
ba_sock.assign(tcp::v4(), sock);

对ba_sock的读写操作非常完美。

现在,我需要使用ssl发送数据。是否可以使用非安全的ba_sock创建ssl套接字?

我尝试过这种方法:

namespace ba = boost::asio;

boost::shared_ptr<ba::ssl::stream<tcp::socket>> ssl_socket;
boost::shared_ptr<ba::ssl::context> ssl_ctx;
ssl_ctx.reset(new ba::ssl::context(ba::ssl::context_base::method::sslv23));
ssl_ctx->set_verify_mode(ba::ssl::verify_peer);

const std::string& server_cert = certificate_get();
ba::const_buffer ba_server_cert(server_cert.data(), server_cert.size());

boost::system::error_code ec;
ssl_ctx->use_certificate(ba_server_cert, ba::ssl::context::pem, ec);

const std::string& client_pkey = private_key_get();
ba::const_buffer ba_client_pkey(client_pkey.data(), client_pkey.size());
ssl_ctx->use_rsa_private_key(ba_client_pkey, ba::ssl::context::pem, ec);

// now create secure socket
ssl_socket.reset(new ba::ssl::stream<tcp::socket>(*ios, *ssl_ctx));
ssl_socket->lowest_layer().connect(ba_sock.local_endpoint(), ec);

if (ec.value())
    printf("%s\n", ec.message().c_str());

connect(ba_sock.local_endpoint(), ec);给我一个错误“连接被拒绝”。

我想念什么?是证书问题还是使用ba_sock.local_endpoint()是我错误的?

0 个答案:

没有答案