Wireshark で https を復号化するには
Wireshark は NIC の入出力ビットを取得しているので、アプリケーションが暗号化した通信 ( SSL / TLS や SSH ) は、暗号化されたまま表示されます。https では特に Info 列に "Application Data" と表示され、中身を見ても "Encrypted Appliocation Data" (暗号化されたアプリケーションのデータ)とラベルされ、平文は見られません。
ですが、ブラウザによる https 通信については、以下の手順で復号化することができます。
- 環境変数 SSLKEYLOGFILE を設定し、https 通信時に TLS セッションキーを指定フォルダのファイルへ書き込みする
- WireShark 側で TLS セッションキーを読み込む設定をする
なお、ブラウザは FireFox および Chrome で確認で動作確認できています。(IE と Edge は動作せず)
設定手順
1. Windowsキー +R で「ファイル名を指定して実行」画面を出し、 control と打ち [OK] ボタンを押下
2. コントロールパネルから "システム" または "システムとセキュリティ ⇒ システム" をクリックし、そこから "システムの詳細設定" (下図) をクリック
3. "環境変数" をクリック
4. システム環境変数(下段)の [新規] ボタンをクリック
5. 変数名に "SSLKEYLOGFILE" 、変数値に出力先のファイルパスを記載(例では "C:\work\tls.keys") します。
6. OKを押し、OS再起動します。
7. ブラウザ (FireFox or Chrome) を起動し、該当ファイルが出来ていることを確認します。
8. 問題なければ、WireShark 側に以下のように設定を入れます。
これにより、ブラウザでの https アクセスについて、平文が見えるはずです。以下の例では、TCP 443 の https (TLSv1.2) で HTTP/1.1 200 OK が平文で確認できています。
注意点として、これを他のPCの Wireshark で開くときは暗号化された状態で開いてしまいます。ですが、セッションキーをそのPCにコピーし、同じ手順で Wireshark に設定すればそのPCでも復号化した状態で見ることができます。
ブラウザで https を復号化するには
利用するツールは、ブラウザ標準搭載機能のデベロッパーツールです。具体的には『Google Chrome Developer Tools』、『Firefox Developer Tools』、『Edge Developer Tools(F12開発者ツール)』です。
ブラウザは送信用平文データをソケットAPIに渡し、ソケットAPIが暗号化してNICに渡し、ネットワークへ出ていきます。逆に暗号化データはNICからソケットAPIで復号化をした上でブラウザに渡されます。なのでブラウザで通信をキャプチャした場合は常に平文データになるわけです。
利用方法は超簡単。通常のインストールをしたブラウザを起動し、F12ボタンを押すだけです。
デベロッパーツールを用いてhttpsの中身を見てみる
主要3ブラウザでの結果を見てみます。ともに手順は以下の通りです。
全てのブラウザでhttpヘッダ(メタ情報)やボディ(htmlファイル/画像ファイル等の実際のコンテンツ)が見えています。また、https://yahoo.co.jp へアクセスすると、httpレスポンスコード301により https://www.yahoo.co.jp へリダイレクトされていることも確認できます。
Chrome の場合
関連して他のファイル(画像等)がどのくらい遅延して、どのくらいの速度で読み込めたのかがビジュアルで分かり易く表示されます。
Firefoxの場合
OpenSourceだけあり、解析機能が充実しています。
Edgeの場合
一番シンプルで開発初心者向け?
デベロッパーツールのその他の使い道
デベロッパーツールは Web アプリ開発者向けに様々な機能を提供していますが、それ以外に上記のような https でのトラブルシューティング(画面遷移の URL が分からない、等)であったり、Webの同時ログインのネットワークパフォーマンス試験、クライアントのCPUメモリ負荷の計測等に使えたりします。
ただし、http/2 や http/3 のヘッダ情報等が見れなかったりするので、そういう勉強をするならば Wireshark で復号化した方がよいでしょう。