WiresharkでHTTPSを復号化する

Wiresharkhttps通信を復号化するときの備忘録。
今回はMacOSChromelocalhostのnginxでhttpsの通信をする。

準備

証明書

mkcertlocalhostの証明書と秘密鍵を用意する。コマンドを実行するとlocalhost.pemlocalhost-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-fileSSL 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

コマンドラインから起動したChromehttps://localhost にアクセスすると、復号化されたHTTPSのパケットが確認できる。

参考