2017-12-29 28 views
2

私は、HTTPSだけでターゲットサーバと通信するために、HTTP接続のみを許可するプロキシサーバに接続したいと考えています。SSLトンネルとBoost :: Beast

プロキシサーバーのマニュアルでは、HTTP接続動詞(プロキシサーバー自体に直接HTTPS接続を追加しようとしていますが、HTTP接続のみが許可されています)を使用する方法が記載されています。私のC++プログラムで

、私は正常に接続されており、boost::beastなしboost::asioを使用して、数ヶ月の間にssl_stream年代を使用してターゲットサーバに働いたが、私はいくつかのCloudFlareのIPを避けるために、今、マルチIPプロキシサーバを使用したいです物事を簡単にするためにboost::beastを使用してください。ですから、boost :: asioを使って作業する方法はありますが、私はboost::beast初心者です(そして、SSLの仕組みも完全には理解できません)。

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

これはlowest_layer/next_layerのものと関係がありますが、わかりません。

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

答えて

2
  1. に要求を送信獣

  2. を使用して接続するHTTPリクエストメッセージ(req)をビルド

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

  3. iocio_contextで)接続のための変数を宣言プロキシプレーンテキスト(注:next_layer()

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

  4. レスポンスがOKのステータスを持っている場合は、トンネルが

  5. を確立している今、SSLハンドシェイクの実行プロキシ

  6. からのHTTPレスポンスを読む

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

この時点で、HTTPリクエストをstreamに書き込んで、 Beastを通常通り使用しているstreamからのHTTP応答(next_layer()を再度使用しないでください)。

関連する問題