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... ...
ちゃんと各種パースされている。