TLS1.3動いたシリーズの第3回目(?)
WiresharkはTLSの実装一覧ページ(URL)では、以前よりTLS1.3対応をうたっていたがあまり出来は芳しくなかった。しかし、先日 TLS1.3絡みのコミットが幾つか入ったので、実際に改善されていることを確認した
コミットログ(URL)を見る限りdecryptにも対応しているようなので、復号もできそうだが、TLS1.3になって復号に必要なパラメータが変わったため SSLKEYLOGFILEまわりの仕組みがどうなってるかはよくわからない。picotlsだと、うまくいくかもしれない(URL)
2019年5月追記: すでに復号対応しております。SSLKEYLOGFILEを食わせれば復号できる。
ビルド
今回は簡単に、CUI版であるTsharkをtrustyでビルドする
sudo apt-get install -y flex libglib2.0-dev libpcap-dev bison git clone https://github.com/wireshark/wireshark.git --depth=1 cd ./wireshark ./autogen.sh ./configure --disable-wireshark --enable-tshark --enable-ipv6 --disable-gtktest\ --disable-glibtest --disable-editcap --disable-capinfos --disable-mergecap --disable-reordercap\ --disable-text2pcap --disable-dftest --disable-randpkt --disable-airpcap --disable-rawshark\ --enable-pcap-ng-default --without-lua make
パケットをパースする
「NginxでTLS1.3 動いた(OpenSSL)」で取得したパケットを、Tsharkで読み込む。
ClientHello (一部省略)
vagrant@vagrant:~$ ./wireshark/tshark -r ./tls.pcap -V
Secure Sockets Layer
TLSv1 Record Layer: Handshake Protocol: Client Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 512
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 508
Version: TLS 1.2 (0x0303)
Random: ba9f24242b401e562d6c529d6ea5cf...
GMT Unix Time: Mar 20, 2069 07:54:12.000000000 UTC
Random Bytes: 2b401e562d6c529d6ea5cf631acccb7...
Session ID Length: 0
Cipher Suites Length: 32
Cipher Suites (16 suites)
Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301)
Cipher Suite: TLS_CHACHA20_POLY1305_SHA256 (0x1303)
...
Extension: elliptic_curves (len=14)
Extension: key_share (len=107)
Extension: supported_versions (len=9)
Type: supported_versions (43)
Length: 9
Supported Versions length: 8
Supported Versions: TLS 1.3 (draft 18) (0x7f12)
Supported Versions: TLS 1.2 (0x0303)
Supported Versions: TLS 1.1 (0x0302)
Supported Versions: TLS 1.0 (0x0301)
Extension: psk_key_exchange_modes (len=2)
Extension: signature_algorithms (len=24)TLS1.3のCipher Suitesや、supported_versionsを始めとしたTLS1.3の拡張がちゃんとパースされる
同様にServer Hello
Secure Sockets Layer
TLSv1 Record Layer: Handshake Protocol: Server Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 115
Handshake Protocol: Server Hello
Handshake Type: Server Hello (2)
Length: 111
Version: TLS 1.3 (draft 18) (0x7f12)
Random: 218aacf7524e2cc7edbb75f985bf651d1243ec09f638ad05...
Cipher Suite: TLS_AES_256_GCM_SHA384 (0x1302)
Extensions Length: 73
Extension: key_share (len=69)
Type: key_share (40)
Length: 69
Key Share extension
Key Share Entry: Group: secp256r1, Key Exchange length: 65
Group: secp256r1 (23)
Key Exchange Length: 65
Key Exchange: 041433c8bcef4c30966cb6dbeb9...
TLSv1.3 Record Layer: Application Data Protocol: http-over-tls
Opaque Type: Application Data (23)
Version: TLS 1.0 (0x0301)
Length: 38
Encrypted Application Data: a1d0f18331e621b995503baa963613de56a19d546a6abaf4...
...ちゃんと各種パースされている。