SSLは、man-in-the-middle攻撃から保護することを目的としているため、トラフィックを復号化するためのキーを抽出することはできません。アプリケーションがプロキシとして機能している場合、受信する可能性のあるクリアテキストは最初のCONNECT
リクエストのみです。
1つのオプションは、SSL検査を許可するために多くの商用ファイアウォールが行うことを実行することです。これは、クライアントへの接続のリモート側を偽装し、それぞれに個別のSSLストリームを確立することです。これを行うには、いくつかのことを行う必要があります。これは、プロキシを使用するすべてのクライアントに独自の信頼されたルート証明書をインストールできる場合にのみ機能します(Windowsグループポリシーを使用するなど)。これができない場合は、やろうとしていることが事実上不可能になるため、あきらめた方がよいでしょう。
- クライアントが接続しているサーバーの名前を
CONNECT
要求から判別します。
- クライアントによって信頼されているルート証明書によって署名された、手順1で確立されたサーバー名に設定されたCNを使用して証明書を生成します。
- 宛先ホストへのネットワーク接続を確立し、.NETを使用し
SslStream
て接続をラップして。を呼び出しますAuthenticateAsClient(...)
。
- 再びを使用して
SslStream
、クライアントの着信ネットワークストリームをラップし、AuthenticateAsServer()
手順2で生成された証明書を使用して呼び出します。
- 2つの接続間でデータを転送し、必要に応じてログに記録します。