0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TLS 1.3: 見えない Finished

Posted at

Finished

Finishedは暗号化されているのでwiresharkでは見えません。clientがexample.comのコンテンツをGETした後、通信は何も起こらなくなります。それから45秒後からのやり取りが以下です。

# time src dest protocol length TCP flags seq ack info
1098 48.839818 localhost example.com TCP 54 ·······A···· 1525 5813 [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0
1108 48.992493 example.com localhost TCP 66 ·······A···· 5813 1526 [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936311918 TSecr=107391998
1369 64.549821 example.com localhost TCP 66 ·······A···· 5812 1526 [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936327237 TSecr=107391998
1370 64.55017 localhost example.com TCP 66 ·······A···· 1526 5813 [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107452954 TSecr=2936311918
2417 109.887607 localhost example.com TCP 54 ·······A···· 1525 5813 [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0
2418 110.041827 example.com localhost TCP 66 ·······A···· 5813 1526 [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936372958 TSecr=107452954
2790 125.889367 example.com localhost TCP 66 ·······A···· 5812 1526 [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936388677 TSecr=107452954
2791 125.889583 localhost example.com TCP 66 ·······A···· 1526 5813 [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107513834 TSecr=2936372958
4317 171.346262 localhost example.com TCP 54 ·······A···· 1525 5813 [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0
4318 171.522983 example.com localhost TCP 66 ·······A···· 5813 1526 [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936434446 TSecr=107513834
4366 183.843569 example.com localhost TLSv1.3 123 ·······AP··· 5813 1526 Application Data
4367 183.843575 example.com localhost TLSv1.3 90 ·······AP··· 5870 1526 Application Data
4368 183.843577 example.com localhost TCP 66 ·······A···F 5894 1526 443 → 58364 [FIN, ACK] Seq=5894 Ack=1526 Win=69120 Len=0 TSval=2936446685 TSecr=107513834
4369 183.844156 localhost example.com TCP 66 ·······A···· 1526 5870 58364 → 443 [ACK] Seq=1526 Ack=5870 Win=131008 Len=0 TSval=107571319 TSecr=2936446685
4370 183.844157 localhost example.com TCP 66 ·······A···· 1526 5894 58364 → 443 [ACK] Seq=1526 Ack=5894 Win=130944 Len=0 TSval=107571319 TSecr=2936446685
4371 183.8442 localhost example.com TCP 66 ·······A···· 1526 5895 58364 → 443 [ACK] Seq=1526 Ack=5895 Win=130944 Len=0 TSval=107571319 TSecr=2936446685
4372 183.846191 localhost example.com TCP 54 ·······A·R·· 1526 5895 58364 → 443 [RST, ACK] Seq=1526 Ack=5895 Win=131008 Len=0

うー表から秒数を除去したことを公開しているなう。

TCP Keep-Alive

# time src dest protocol length TCP flags seq ack info
1098 48.839818 localhost example.com TCP 54 ·······A···· 1525 5813 [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0
1108 48.992493 example.com localhost TCP 66 ·······A···· 5813 1526 [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936311918 TSecr=107391998
1369 64.549821 example.com localhost TCP 66 ·······A···· 5812 1526 [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936327237 TSecr=107391998
1370 64.55017 localhost example.com TCP 66 ·······A···· 1526 5813 [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107452954 TSecr=2936311918
2417 109.887607 localhost example.com TCP 54 ·······A···· 1525 5813 [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0
2418 110.041827 example.com localhost TCP 66 ·······A···· 5813 1526 [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936372958 TSecr=107452954
2790 125.889367 example.com localhost TCP 66 ·······A···· 5812 1526 [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936388677 TSecr=107452954
2791 125.889583 localhost example.com TCP 66 ·······A···· 1526 5813 [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107513834 TSecr=2936372958
4317 171.346262 localhost example.com TCP 54 ·······A···· 1525 5813 [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0
4318 171.522983 example.com localhost TCP 66 ·······A···· 5813 1526 [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936434446 TSecr=107513834

これはTLS通信ではないですが確認します。TCP connectionを切らないために定期的に生死確認をします。「生きてるか?(keep alive)」と送り、「生きてるよ(ACK)」と返します。
サーバ側がHTMLコンテンツを返してから、45秒、25秒、45秒、25秒、と送り合っているように見えたのですが、よく見ると

client側から聞いているのは 45秒、60秒、60秒のタイミング
server側から聞いているのは 60秒、60秒、そしてさらに60秒後に Application dataになりました。

clientがコンテンツをGETしたあと、何もしていない3分00秒間 コネクションがつながっていたことになります。

これを切断するため(だと思われる)パケットとして、サーバが2つの特別な何かを送ったようです。

(server) Application Data x 2

3分何もリクエストしてこないclientにしびれを切らしたサーバ側が180秒後に送ったのが2つの Application Data です。

(server) Application data (1)

TCP Layer

これは PSH, ACK でした。FINではありません。

Flags: 0x018 (PSH, ACK)

TLS

57bytes あります。 type は Application Data (23) です。暗号化されているので見えません。

Transport Layer Security
    TLSv1.3 Record Layer: Application Data Protocol: http-over-tls
        Opaque Type: Application Data (23)
        Version: TLS 1.2 (0x0303)
        Length: 52
        Encrypted Application Data: 0196390581f5af3bd23094eb3ce16fd0dcfcb253006695a692b9be9aff72c2c0b048c193…
        [Application Data Protocol: http-over-tls]

これは恐らく TLS 1.3 の Finished メッセージではないかと想像しています。FInishedメッセージを改ざんすることでMalloryが悪いことをできるので、TLS通信の終了はとても気を遣う処理です。

(server) Application data (2)

TCP Layer

これも PSH, ACK でした。FINではありません。

Flags: 0x018 (PSH, ACK)

TLS

同じくtype は Application Data (23) です。これは 24 bytes でした。 暗号化されているので見えません。

TLSv1.3 Record Layer: Application Data Protocol: http-over-tls
    Opaque Type: Application Data (23)
    Version: TLS 1.2 (0x0303)
    Length: 19
    Encrypted Application Data: c9f46fee4a4040610915c8f41b7f8126c52ade
    [Application Data Protocol: http-over-tls]

Finishedは2つに分かれるのかな。後で調べる。

(server) FIN/ACK, RST/ACK

Serverは2つのapplication dataに続き、FIN/ACKのTCPパケットを送信しました。TCP close sequenceが始まったと思われます。

# time src dest protocol length TCP flags seq ack info
4368 183.843577 example.com localhost TCP 66 ·······A···F 5894 1526 443 → 58364 [FIN, ACK] Seq=5894 Ack=1526 Win=69120 Len=0 TSval=2936446685 TSecr=107513834

TCPの切断シーケンスは FIN, ACK, FIN, ACK が一般的かと

Something went wrong
https://www.geeksforgeeks.org/tcp-connection-termination/

(client) ACK x 3 + RST/ACK x 1

サーバから FINがきたので、返答〜切断します。

# time src dest protocol length TCP flags seq ack info
4369 183.844156 localhost example.com TCP 66 ·······A···· 1526 5870 58364 → 443 [ACK] Seq=1526 Ack=5870 Win=131008 Len=0 TSval=107571319 TSecr=2936446685
4370 183.844157 localhost example.com TCP 66 ·······A···· 1526 5894 58364 → 443 [ACK] Seq=1526 Ack=5894 Win=130944 Len=0 TSval=107571319 TSecr=2936446685
4371 183.8442 localhost example.com TCP 66 ·······A···· 1526 5895 58364 → 443 [ACK] Seq=1526 Ack=5895 Win=130944 Len=0 TSval=107571319 TSecr=2936446685
4372 183.846191 localhost example.com TCP 54 ·······A·R·· 1526 5895 58364 → 443 [RST, ACK] Seq=1526 Ack=5895 Win=131008 Len=0

seq/ack numberから見ると、

1つめのack: serverから来た 2つめのapplication data への ack(なぜか1つめのapplication dataへのackは見当たらない)
2つめのack: serverから来た FIN/ACK(5894) への ACK
3つめのack: serverから来た FIN/ACK(5894) + 1 の 5895 が指定されてる

最後に RST, ACKです。これも 5895 でした。

ここらへんの流れは忘れてしまった。そのうち思い出す。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?