6

Ruby で HTTP プロキシを作成する例をいくつか見てきました。たとえば、この gist by Torsten Beckerですが、「man in the middle」SSL プロキシとしても知られる HTTPS を処理するには、どのように拡張すればよいでしょうか?

独自のロギングとテストのニーズに合わせて拡張できる単純なソース コード フレームワークを探しています。

アップデート

私はすでに、Fiddler に似た気の利いた HTTPS プロキシ アプリである Charlesを使用しています。フィルタリングとプレゼンテーションに特定のニーズがあるため、自分で書きたいと思います。

アップデートⅡ

ざっと調べてみると、用語が少しよくわかりました。私は、完全な「中間者」SSL プロキシを求めているわけではありません。代わりに、自分のマシンでローカルに実行されるため、提供される SSL 証明書を尊重できます。ただし、リクエストのパケットの復号化されたコンテンツと、応答の復号化されたコンテンツを確認する必要があります。

4

4 に答える 4

7

背景情報として、通常の HTTP プロキシはCONNECTメソッドを介して HTTPS リクエストを処理します。ホスト名とポートを読み取り、このポートでこのターゲット サーバーへの TCP 接続を確立し、戻り200 OK、最初のクライアントへの TCP 接続を単にトンネリングします (その TCP 接続の上で SSL/TLS が交換されるという事実はほとんど関係ありません)。

これがdo_CONNECTif のメソッドですWEBrick::HTTPProxyServer

MITM プロキシが必要な場合、つまり SSL/TLS トラフィックの内部を調べたい場合は、確かに を使用できWEBrick::HTTPProxyServerますが、次のように変更する必要がありますdo_CONNECT completely

  • まず、プロキシ サーバーに、その場で証明書を生成できるミニ CA を埋め込む必要があります (それができない場合、ブラウザで警告メッセージをバイパスする場合は、自己署名証明書を使用できる可能性があります)。次に、その CA 証明書をブラウザーにインポートします。
  • 要求を受け取ったらCONNECT、そのホスト名に対して有効な証明書を生成する必要があります (そのホスト名のサブジェクト代替名を使用するか、サブジェクト DN の共通名を使用することをお勧めします)、ソケットを SSL/TLS にアップグレードします。サーバーソケット(その証明書を使用)。ブラウザがその証明書を信頼することを受け入れる場合、この SSL/TLS ソケットで得られるのはプレーン テキスト トラフィックです。
  • 次に、リクエストを処理し (リクエスト ライン、ヘッダー、およびエンティティを取得)、通常の HTTPS クライアント ライブラリ経由で使用する必要があります。そのトラフィックを の 2 番目のインスタンスに送信できる可能性がありますがWEBrick::HTTPProxyServer、単純な HTTP 要求ではなく発信 HTTPS 要求を行うように微調整する必要があります。
于 2012-08-30T01:20:26.740 に答える
0

そのブログはプロキシを書く方法ではありません。それは非常に簡単です: 接続を受け入れ、接続先を示す 1 行を読み取り、アップストリーム接続を試行し、失敗した場合は適切な応答を送信してソケットを閉じます。 EOS は双方向で発生しています。HTTPS の唯一の違いは、プレーンテキストではなく SSL を使用する必要があることです。

于 2012-08-29T23:31:21.147 に答える
0

私の経験から、HTTPS は「単純」にはほど遠いものです。自分のマシンからのトラフィックをキャッチするプロキシが必要ですか? Fiddlerなど、いくつかのアプリケーションがあります。またはグーグルで代替案を探します。Web トラフィックのデバッグに必要なものがすべて付属しています。

于 2012-08-29T23:35:49.833 に答える
0

Webrick は SSL をプロキシできます。

require 'webrick'
require 'webrick/httpproxy'
WEBrick::HTTPProxyServer.new(:Port => 8080).start
于 2012-08-29T23:43:18.827 に答える