SSL-туннель с Boost :: Beast

Я хочу подключиться к прокси-серверу, который разрешает только HTTP-соединения, общаться с целевым сервером по протоколу HTTPS.

В документации прокси-сервера говорится, что единственный способ сделать это — использовать глагол HTTP Connect (они планируют добавить прямые HTTPS-соединения к самому прокси-серверу, но на данный момент разрешены только HTTP-соединения).

В моей программе на C ++ я успешно подключился и работал с целевым сервером, используя ssl_streamв течение пары месяцев, используя boost::asio без boost::beast, но теперь я хочу использовать прокси-сервер с несколькими ip, чтобы избежать запретов IP-адресов в Cloudflare, и использовать boost::beast сделать вещи проще; Итак, я теперь, как работать с Boost :: Asio, но я boost::beast новичок (и я не совсем понимаю, как работает SSL).

Я думаю, что в моем понимании, когда вы используете ssl_streamвы записываете все сообщение, однако мне сейчас нужно вставить зашифрованное сообщение в тело HTTP CONNECT, и я не знаю, как это сделать.

Я читал, что это как-то связано с lowest_layer/next_layer вещь, но я не уверен.

Кто-нибудь может привести пример полного соединения для чтения / записи с прокси-сервером? или хотя бы дальнейшие уточнения?

2

Решение

  1. Объявить переменную для соединения (ioc это io_context)

    boost::asio::ssl::stream<boost::asio::ip::tcp::socket> stream{ioc};

  2. Создайте сообщение запроса HTTP CONNECT (req) используя зверя

  3. Отправьте запрос в прокси в виде простого текста (примечание next_layer())

    boost::beast::http::write(stream.next_layer(), req);

  4. Прочитайте ответ HTTP от прокси

  5. Если ответ имеет статус OK, туннель установлен
  6. Теперь выполните SSL рукопожатие:

    stream.handshake(boost::asio::ssl::stream_base::client);

На этом этапе вы можете писать HTTP-запросы stream и читать ответы HTTP от stream используя зверя как обычно (не используйте next_layer() снова).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]