Wiresharkはv2.3.0からTLS 1.3 draft 19に対応する。めでたい。すぐに使いたい人は、Nightlyビルドをとってくるとよい。
追記:v2.5.0rc0-1840-gd35ed012ce から TLS 1.3 draft 22 に対応している。(draft 22 はまだ出てないけど。)
使ってみる
ポート13443で起動しているHaskellサーバとpicotlsクライアントの通信をtcpdumpでキャプチャしたファイルを"pico.pcap"とする。これを表示してみよう。
% tshark -dtcp.port==13443,ssl -Y ssl -r pico.pcap -V Secure Sockets Layer TLSv1 Record Layer: Handshake Protocol: Client Hello Content Type: Handshake (22) Version: TLS 1.0 (0x0301) Length: 178 Handshake Protocol: Client Hello Handshake Type: Client Hello (1) Length: 174 Version: TLS 1.2 (0x0303) Random: c61e4f47e9d8f0c6e713bd872bd488c1a8c9bb855b8ccb4a... GMT Unix Time: May 1, 2075 03:39:03.000000000 JST Random Bytes: e9d8f0c6e713bd872bd488c1a8c9bb855b8ccb4a2bfad94d... Session ID Length: 0 Cipher Suites Length: 2 Cipher Suites (1 suite) Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301) Compression Methods Length: 1 Compression Methods (1 method) Compression Method: null (0) ... Extension: key_share (len=71) Type: key_share (40) Length: 71 Key Share extension Client Key Share Length: 69 Key Share Entry: Group: secp256r1, Key Exchange length: 65 Group: secp256r1 (23) Key Exchange Length: 65 Key Exchange: 046ed5a9aca26248b0fc322e218e778ebd17f4b47add1a7a...
ClientHello のkey_shareが表示できてる。やったね!
オプションの意味:
復号化する
picotlsでは、cliに"-l"でファイルを指定すると、セッションキーをそのファイルに書き出す。ここでは、ファイル名を"pico.keys"とする。内容はこんな感じ:
% cat pico.keys SERVER_HANDSHAKE_TRAFFIC_SECRET 秘密の鍵1 CLIENT_HANDSHAKE_TRAFFIC_SECRET 秘密の鍵2 SERVER_TRAFFIC_SECRET_0 秘密の鍵3 CLIENT_TRAFFIC_SECRET_0 秘密の鍵4
このファイルをtsharkに指定すると、暗号化されている部分が復号化できる。
% tshark -ossl.keylog_file:pico.keys -dtcp.port==13443,ssl -Y ssl -r pico.pcap 4 0.028292 IPアドレスA → IPアドレスB TLSv1 249 Client Hello 6 0.060786 IPアドレスB → IPアドレスA TLSv1.3 1514 Server Hello, Encrypted Extensions 7 0.060844 IPアドレスB → IPアドレスA TLSv1.3 1514 Certificate [TCP segment of a reassembled P DU] 8 0.060847 IPアドレスB → IPアドレスA TLSv1.3 163 Certificate Verify, Finished 11 0.062084 IPアドレスA → IPアドレスB TLSv1.3 124 Finished 12 0.062843 IPアドレスB → IPアドレスA TLSv1.3 368 New Session Ticket 15 4.281915 IPアドレスA → IPアドレスB TLSv1.3 89 Application Data 17 4.307195 IPアドレスB → IPアドレスA TLSv1.3 229 Application Data 19 4.307612 IPアドレスB → IPアドレスA TLSv1.3 90 Alert (Level: Warning, Description: Close Not ify)
やっほー!
オプションの意味:
- "-ossl.keylog_file:pico.keys": 鍵のファイルは "pico.keys"