我使用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()
是我错误的?