[httpsを解析] Wireshark等パケットキャプチャで SSL/TLSが復号化できず中身が表示できない場合の対処

Wireshark で https を復号化するには

Wireshark は NIC の入出力ビットを取得しているので、アプリケーションが暗号化した通信(SSL/TLSやSSH)は、暗号化されたまま表示されます。https では特にInfo列に "Application Data" と表示され、中身を見ても "Encrypted Appliocation Data"(暗号化されたアプリケーションのデータ)とラベルされ、平文は一切見られません

これを復号化して表示するには以下の手順が必要です。

Wiresharkの [Edit] ⇒ [Preferences...] ⇒ ポップアップした画面の左ペインにある[Protocols] のツリーをOpen ⇒ [SSL] ⇒ 中央ペインの "RSA key list" の横にある[Edit...] ⇒ [New] ⇒ 対象通信の情報を入れ、"Key File" の横にあるボタンをクリックし、PC内にある秘密鍵ファイルを選択

そう、秘密鍵が必要です。これはSSL/TLSの仕組みとして当然の要求です。秘密鍵無しに復号化が出来たら、それは暗号化が破られていることになりますので。

しかし通常のケースでこれはたいてい不可能です。例えばhttps://www.google.co.jp/ の通信の中身をWiresharkで見るには、Googleさんから秘密鍵をもらわなければなりません。それは不可能に近いので、別手段を取ります。

利用するツールは、ブラウザ標準搭載機能のデベロッパーツールです。具体的には『Google Chrome Developer Tools』、『Firefox Developer Tools』、『Edge Developer Tools(F12開発者ツール)』です。

ブラウザは送信用平文データをソケットAPIに渡し、ソケットAPIが暗号化してNICに渡し、ネットワークへ出ていきます。逆に暗号化データはNICからソケットAPIで復号化をした上でブラウザに渡されます。なのでブラウザで通信をキャプチャした場合は常に平文データになるわけです。

利用方法は超簡単。通常のインストールをしたブラウザを起動し、F12ボタンを押すだけです。

デベロッパーツールを用いてhttpsの中身を見てみる

主要3ブラウザでの結果を見てみます。ともに手順は以下の通りです。

ブラウザ起動 ⇒ F12ボタンを押す(デベロッパーツールが表示される) ⇒ 表示の"Network" もしくは "ネットワーク" タブを押下する ⇒ https://yahoo.co.jp へアクセスする

全てのブラウザでhttpヘッダ(メタ情報)やボディ(htmlファイル/画像ファイル等の実際のコンテンツ)が見えています。また、https://yahoo.co.jp へアクセスすると、httpレスポンスコード301により https://www.yahoo.co.jp へリダイレクトされていることも確認できます。

Chrome の場合

関連して他のファイル(画像等)がどのくらい遅延して、どのくらいの速度で読み込めたのかがビジュアルで分かり易く表示されます。

Firefoxの場合

OpenSourceだけあり、解析機能が充実しています。

Edgeの場合

一番シンプルで開発初心者向け?

デベロッパーツールの使い道

デベロッパーツールはWebアプリ開発者向けに様々な機能を提供していますが、それ以外に上記のようなhttps でのトラブルシューティング(画面遷移のURLが分からない、等)であったり、Webの同時ログインのネットワークパフォーマンス試験、クライアントのCPUメモリ負荷の計測等に使えたりします。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする