WiresharkのTLS1.3対応 動いた

TLS1.3動いたシリーズの第3回目(?)


WiresharkTLSの実装一覧ページ(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...
...

ちゃんと各種パースされている。