1

TcpListnerがクライアントとサーバー間のプロキシとして機能するシナリオがあります。プロキシはすべてのインターネットトラフィックをログに記録する必要があります。SSLはすべてのhtmlのものを暗号化します。

ストリームからキーを取得してSSLのものを復号化できますか?そうでない場合は、SSLサーバーとして機能できます。しかし、エントリポイントはどこにありますか?サーバーがクライアントにSSLを使用するように指示した場合 サーバーからのストリームをASCIIにエンコードしても、HTMLテキストはヘッダーだけでは表示されません。

4

3 に答える 3

2

SSLは、man-in-the-middle攻撃から保護することを目的としているため、トラフィックを復号化するためのキーを抽出することはできません。アプリケーションがプロキシとして機能している場合、受信する可能性のあるクリアテキストは最初のCONNECTリクエストのみです。

1つのオプションは、SSL検査を許可するために多くの商用ファイアウォールが行うことを実行することです。これは、クライアントへの接続のリモート側を偽装し、それぞれに個別のSSLストリームを確立することです。これを行うには、いくつかのことを行う必要があります。これは、プロキシを使用するすべてのクライアントに独自の信頼されたルート証明書をインストールできる場合にのみ機能します(Windowsグループポリシーを使用するなど)。これができない場合は、やろうとしていることが事実上不可能になるため、あきらめた方がよいでしょう。

  1. クライアントが接続しているサーバーの名前をCONNECT要求から判別します。
  2. クライアントによって信頼されているルート証明書によって署名された、手順1で確立されたサーバー名に設定されたCNを使用して証明書を生成します。
  3. 宛先ホストへのネットワーク接続を確立し、.NETを使用しSslStreamて接続をラップして。を呼び出しますAuthenticateAsClient(...)
  4. 再びを使用してSslStream、クライアントの着信ネットワークストリームをラップし、AuthenticateAsServer()手順2で生成された証明書を使用して呼び出します。
  5. 2つの接続間でデータを転送し、必要に応じてログに記録します。
于 2012-07-31T12:52:44.200 に答える
1

あなたの質問から、あなたはクライアント、真ん中にプロキシ、そしてサーバーを持っているようです。クライアントとサーバーはSSLを使用して通信しており、プロキシがクライアントとサーバー間のSSL暗号化メッセージを復号化する必要があります。

それでは、最初の質問は、サーバーはあなたのものですか?そうでない場合、これはまさにSSLが防止することになっていることです。次回インターネットでクレジットカードを使って何かを購入するときは、あなたが求めていることが可能であれば、ISPが何をすることができるかを考えてください。彼らはあなたとウェブストアの間にプロキシを置き、あなたのクレジットカード番号を解読することができます。 dは決して知りません。

于 2012-07-31T12:52:31.653 に答える
0

秘密鍵を持っている場合にのみ、SSLパケットを復号化できます。インターネットトラフィックを検査またはログに記録する場合はwiresharkを調べ、 HTTPS復号化を理解するための実用的な方法についてはフィドラーを調べてください。

于 2012-07-31T12:46:26.163 に答える