TLS 1.3: 見えない Finished 

# 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秒間 コネクションがつながっていたことになります。

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

# (server) Application Data x 2

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

##  (server) Application data (1)

### TCP Layer

これは `PSH, ACK` でした。FINではありません。
```rb
Flags: 0x018 (PSH, ACK)
```

### TLS

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


```yml
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ではありません。

```rb
Flags: 0x018 (PSH, ACK)
```

### TLS

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

```yml
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は２つに分かれるのかな。後で調べる。


# (server) FIN/ACK, RST/ACK

Serverは２つの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 でした。

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