あるセクションでは、HTTPS の安全な通信プロセスを分析し、HTTPS が中間者攻撃を効果的に防止できることを学びました。しかし、パケット キャプチャ ツールを使用したことがある人なら誰でも、たとえば Charles と Fiddler が HTTPS リクエストをキャプチャして復号化できることを知っています。
まず、Charles の公式 Web サイトで HTTPS プロキシの説明を見てみましょう: (推奨学習: Web フロント-ビデオ チュートリアル終了)
Charles は仲介エージェントとして機能します。ブラウザがサーバーと通信するとき、Charles はサーバーの証明書を受け取りますが、証明書を動的に生成してブラウザに送信します。つまり、Charles はブラウザの仲介エージェントとして機能し、サーバーと通信するため、通信データは Charles によって傍受され、復号化される可能性があります。 Charles が証明書を変更したため、検証に合格しない場合、ブラウザはセキュリティ警告を表示します。通常のアクセスを実行する前に、Charles の証明書をインストールする必要があります。
Charles が行う必要があるのは、サーバーをクライアントに、クライアントをサーバーに偽装することです。実際のクライアントの HTTPS リクエストをインターセプトし、クライアントを偽装する クライアントは HTTPS リクエストを実サーバーに送信します。
実サーバーの応答を受け入れ、Charles 自身の証明書を使用してサーバーを偽装し、データ コンテンツを実クライアントに送信します。
具体的なプロセスを見てみましょう:
クライアントはサーバーへの HTTPS リクエストを開始します
Charles はクライアントのリクエストをインターセプトし、クライアントのふりをして次のリクエストを行います。サーバー
#サーバーは「クライアント」にリクエストを送信します (実際は Charles です) サーバーの CA 証明書を返しますCharles はサーバーの応答を傍受し、サーバー証明書の公開キーを取得します。自分で証明書を作成し、サーバー証明書を置き換えてクライアントに送信します。 (このステップでは、Charles はサーバー証明書の公開キーを取得します) クライアントは「サーバー」(実際には Charles) の証明書を受信した後、対称キーを生成し、Charles の公開キーで暗号化します。を送信し、「サーバー」に渡します (Charles) Charles はクライアントの応答を傍受し、自分の秘密鍵で対称鍵を復号化し、それをサーバー証明書の公開鍵で暗号化してサーバーに送信します。 (このステップで、Charles は対称キーを取得します) サーバーは対称キーを独自の秘密キーで復号化し、応答を「クライアント」 (Charles) に送信しますCharles はサーバーの暗号化キーを傍受します。応答、独自の証明書に置き換えてクライアントに送信します。この時点で、接続が確立されます。Charles は、サーバー証明書の公開キーと、クライアントとサーバーの間でネゴシエートされた対称キーを取得しました。その後、暗号化されたメッセージを復号化または変更できます。HTTPS パケット キャプチャの原理は非常に単純で、簡単に言うと、Charles は「仲介エージェント」として、サーバー証明書の公開キーと HTTPS 接続の対称キーを取得します。前提として、クライアントは信頼を選択して Charles の CA 証明書をインストールします。そうでない場合、クライアントは「警告」を発して接続を終了します。この観点から見ると、HTTPS は依然として非常に安全です
以上がhttpsパケットキャプチャの原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。