4

HTTP 接続のみを許可するプロキシ サーバーに接続し、ターゲット サーバーと HTTPS で通信したい。

プロキシ サーバーのドキュメントには、これを行う唯一の方法は HTTP Connect 動詞を使用することであると記載されています (プロキシ サーバー自体に直接 HTTPS 接続を追加する予定ですが、現時点では HTTP 接続のみが許可されています)。

私のC++プログラムでは、を使用しssl_streamて数か月間、を使用boost::asioしてターゲットサーバーに正常に接続して作業しましたが、今は物事を簡単にするためboost::beastにプロキシを使用したいと考えています。boost::beastそれで、私はboost::asioの使い方を学びましたが、私はboost::beast初心者です(SSLの仕組みも完全には理解していません)。

私の理解では、を使用するssl_streamと、通信全体が暗号化されると思いますが、今必要なのは、暗号化されたメッセージを CONNECT HTTP 本文に挿入することであり、その方法がわかりません。

lowest_layerこれは/と関係があると読みましたが、よくわかりnext_layerません。

プロキシサーバーとの完全な読み取り/書き込み接続の例を誰か提供できますか? または少なくともさらなる説明?

4

1 に答える 1

5
  1. 接続用の変数を宣言します (iocio_context)

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

  2. reqBeast を使用して CONNECT HTTP 要求メッセージ ( ) を作成する

  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);

この時点で、通常どおり Beast を使用して HTTP 要求を書き込んstreamだり、HTTP 応答を読み取ったりできますstream(再度使用しないでくださいnext_layer())。

于 2018-01-05T16:59:35.050 に答える