はじめに
プライバシー保護の観点からは通信の暗号化は重要ですが、トラブルシュートを行う際にはパケットの中身が見えないと思うように解析が進みません。WiresharkではTLS通信の暗号キーを読み込む機能があるので、HTTPSの暗号化パケットを復号して確認することができます。
便利な機能なのですが、以外と周囲で知らない人が多かったので、手順をまとめておきます。
SSLKEYLOGとは
SSLKEYLOG は、TLS(Transport Layer Security)通信の暗号キーをログファイルに記録するために使用される環境変数です。SSLKEYLOGFILE環境変数を設定すると、TLS接続のために生成される暗号キーをファイルに記録できます。このファイルをWiresharkのようなネットワーク解析ツールに読み込ませることで、暗号化されたトラフィックを復号できます。
SSLKEYLOGFILEの仕様については以下の提案がIETFに提出されています。
ファイル形式は以下にまとまっています。
最近のWebブラウザであれば対応しているものが多く、少なくともMicrosoft edgeやGoogle Chrome、FirefoxではSSLKEYLOGFILEを使ってTLS通信の暗号キーをファイルに保存できます。
Internet ExplorerやMicrosoft edgeをIEモードで使用した場合には、SSLKEYLOGFILEを使ってTLS通信の暗号キーを保存することはできません。エンタープライズ系のシステムではIEモード等を使用するケースも多いので注意しましょう。
どうしてもInternet ExplorerやMicrosoft edgeのIEモードで、どのようなHTTPS通信が行われているか確認したい場合は、Fiddlerを使用するのがおすすめです。
SSLKEYLOGFILEの設定
まずはSSLKEYLOGFILE環境変数を設定します。
1.コマンドプロンプトを管理者権限で起動します。
2.以下コマンドを実行します。フォルダは任意の場所で構いません。
setx SSLKEYLOGFILE C:\work\tlskeys.txt
3.以下コマンドを実行し、SSLKEYLOG
という環境変数が追加されていることを確認します。
set
4.OSを再起動します。
Webブラウザの再起動でも構いませんが、バックグラウンドで動いているサービス/プロセスを停止しきれない可能性があるので、OSの再起動を行うのが確実です。
5.WebブラウザでHTTPSサイトへアクセスし、C:\work\tlskeys.txt
が作成されていることを確認します。
パケットキャプチャの取得
パケットキャプチャは任意のツールを使用して取得します。
Wiresharkがおすすめですが、WiresharkをインストールできないPC環境であれば、
コマンドプロンプトからnetsh trace
を使ったり、PowerShellからPktmon
を使用するのも良いでしょう。
HTTPSパケットの復号
取得したパケットキャプチャをWiresharkで開き、TLSデコードを行います。
パケットを取得したPCとパケットの解析を行うPCが異なる場合は、解析を行うPCにパケットキャプチャデータとtlskeys.txt
をコピーしてから以下の手順を行ってください。tlskeys.txt
さえあれば、他のPCでも問題なくTLSデコードが可能です。
1.Wiresharkを起動します。
2.編集 > 設定 を開きます。
3.[Protocols] から [TLS] を選択します。
4.[(Pre)-Master-Secret log filename] にC:\work\tlskeys.txt
を指定します。
5.[OK] を押下し、設定ウィンドウを閉じます。
6.取得したパケットキャプチャファイル(.pcap / .pcapng)を開きます。
7.以下画像のようにtcp/443の通信でもHTTPヘッダの中身(HTTP/1.1 200 OK)が平文で見えるようになっていれば成功です。
SSLKEYLOGFILEの削除
放っておくとC:\work\tlskeys.txt
が肥大化するので、不要になったらSSLKEYLOGFILE環境変数は削除しましょう。
1.コマンドプロンプトを管理者権限で起動します。
2.以下コマンドを実行します。フォルダは任意の場所で構いません。
setx SSLKEYLOGFILE ""
3.以下コマンドを実行し、SSLKEYLOG
という環境変数が削除されていることを確認します。
set
4.OSを再起動します。
Webブラウザの再起動でも構いませんが、バックグラウンドで動いているサービス/プロセスを停止しきれない可能性があるので、OSの再起動を行うのが確実です。
5.C:\work\tlskeys.txt
を削除します。
6.WebブラウザでHTTPSサイトへアクセスし、C:\work\tlskeys.txt
が作成されていないことを確認します。
SSLKEYLOGFILEを空にする
不要になったらSSLKEYLOGFILE環境変数を削除するのも一手ですが、毎回設定するのも面倒、というケースもあると思います。
そんなときはPowerShellとタスクスケジューラを使って定期的に削除するのがおすすめです。
PowerShellスクリプト
Clear-Content
というコマンドを使うことで、ファイルは削除せず、ファイルの中身を空にすることができます。
Clear-Content "C:\work\tlskeys.txt"
タスクスケジューラ
Windows PCのユーザーログオン時に、TLS通信の暗号キーファイルを空にするPowerShellスクリプトが実行されるよう登録します。Webブラウザ起動前にTLS通信の暗号キーファイルを操作するのでファイルを掴まれることもなく、日々TLS通信の暗号キーファイルがリセットされるので、ファイルの肥大化を防ぐことができます。
役に立ったなと思う方はビール1杯奢ってください。