WiresharkでHTTPSを復号化する
Wiresharkでhttps通信を復号化するときの備忘録。
今回はMacOSのChromeとlocalhostのnginxでhttpsの通信をする。
準備
証明書
mkcertでlocalhostの証明書と秘密鍵を用意する。コマンドを実行するとlocalhost.pem
とlocalhost-key.pem
が作成されるので、これをnginxに設定する。
% brew install mkcert
% mkcert -install
% mkcert localhost
NGINX
localhost.conf
server { listen 443 ssl; server_name localhost; root /usr/share/nginx/html; ssl_certificate localhost.pem; ssl_certificate_key localhost-key.pem; }
compose.yaml
services: nginx: image: nginx:latest ports: - "443:443" volumes: - ./localhost.conf:/etc/nginx/conf.d/localhost.conf - ./localhost-key.pem:/etc/nginx/localhost-key.pem - ./localhost.pem:/etc/nginx/localhost.pem
Dockerでnginxを起動する。
% docker compose up
Google Chrome
環境変数SSLKEYLOGFILE
かコマンドライン引数の--ssl-key-log-file
でSSL session keyのログファイルを指定して、コマンドラインからChromeを起動する。今回はコマンドライン引数でsslkey.log
ファイルを指定してChromeを起動する。
% /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-key-log-file=./sslkey.log
Wireshark
Preferences -> Protocols -> TLS から「(Pre)-Master-Secret log filename」にsslkey.log
ファイルを設定後、Wiresharkを再起動する。
Demo
コマンドラインから起動したChromeで https://localhost にアクセスすると、復号化されたHTTPSのパケットが確認できる。