2017-04-25
TLS 1.3 開発日記 その16 Wireshark
Wiresharkはv2.3.0からTLS 1.3 ID 19に対応する。めでたい。すぐに使いたい人は、Nightlyビルドをとってくるとよい。
使ってみる
ポート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が表示できてる。やったね!
オプションの意味:
- "-dtcp.port==13443,ssl": ポート13443をTLSとして解析
- "-Y ssl": TLSだけを表示
- "-r pico.pcap": 入力ファイルは "pico.pcap"
- "-V":詳細表示
復号化する
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"
Macでの戦い
しかし、Macでは復号化できなかった。教えてもらった"-ossl.debug_file:ssl-debug.txt "というデバッグオプションを付けてみると:
% cat ssl-debug.txt ... Libgcrypt version: 1.5.0 ... Libgcrypt is older than 1.6, unable to verify auth tag!
というわけで、libgcryptが古いのが原因だった。"-ossl.ignore_ssl_mac_failed:TRUE"を付けると見れるようになると教えてもらった。そのうち解決されるだろう。
トラックバック - http://d.hatena.ne.jp/kazu-yamamoto/20170425/1493108056
リンク元
- 15 https://www.google.co.jp/
- 10 http://b.hatena.ne.jp/
- 4 http://www.google.co.uk/url?sa=t&source=web&cd=1
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwiOu_iylr_TAhUIULwKHSAuBH0QFggiMAA&url=http://d.hatena.ne.jp/kazu-yamamoto/20080530/1212141904&usg=AFQjCNGSPSp27Sm5gs3kQtBxAfs-rpeCoQ
- 2 http://d.hatena.ne.jp/keyword/txt
- 1 http://b.hatena.ne.jp/entrylist/it
- 1 http://d.hatena.ne.jp/n314/20150804/1438667410
- 1 http://dlvr.it/NzQMyv
- 1 http://hatebu.straightline.jp/?http://b.hatena.ne.jp/entrylist
- 1 http://ift.tt/2pghYCQ