注意
- 実装状況や仕様については、執筆当時のものになります。今後変更される可能性があります。
- 本データの内容の正確性・信頼性については保証いたしかねます。
- 本データはGREEの特定のWebサービスから得られた一部分を基にしています。
追記: 2018/05/11 実際に使用した記事を書きました 「TLS1.3だとハンドシェイクがどれくらい早くなるか測定した」
1 |
<hr> |
皆さまはじめまして、インフラの後藤です。
今回は、そろそろRFCが出る と言われているTLS1.3について簡単に見ていこうと思います。
TLS1.3はその名の通りTLSの次期バージョンです。数字上はマイナーバージョンアップですが、TLS2と呼ぶかといった議論が出るほどに大きな変更が入っています。
このTLS1.3では、多岐にわたるセキュリティの改善はもちろんのことパフォーマンスに関する改善も盛り込まれています。
例えば通信を開始する際のフルハンドシェイクは、TLS1.2と比べると実際のデータを送るまでのメッセージの往復回数が一回少なくなっています (HelloRetryRequestを送るケースもある...)
さらに、一度接続したことがあり鍵を共有している相手とは初回からデータを送信する 0-RTTハンドシェイクというハンドシェイクもあります。もちろんこのデータも暗号化されています(ただし、前方秘匿性は無い上、再送攻撃のリスクがある)。
また、TLS1.2以前は出来ませんでしたがTLS1.3ではクライアントは異なるSNIでもセッションの再開(resumption)が可能です。異なるSNIでも証明書がValidな事が条件ですが、多くのドメインを使用している弊社などでは、セッションを再開できる可能性が増すことは良いことです。
ただし、実装がこの機能を有効にするかはまた別の話ですので注意が必要です。
TLS1.3の実装はすでに進んでおり、ブラウザや、暗号ライブラリ、サーバミドルウェアとそれぞれ実験的にサポートしているものもあります。
例えば、facebook社やCloudflare社のサービスでは実験的にTLS1.3エンドポイントを公開しています。TLS1.3(draft-23)が有効になっていれば実際にTLS1.3で接続できます。
弊社環境でもあるエンドポイントで、年明け頃よりTLSハンドシェイクをサンプリングしており、TLS1.3対応のハンドシェイクがどれくらい来ているか調べていますが、すでにTLS1.3のハンドシェイクは全ハンドシェイク中の10%近く来ています。直近、Chrome StableでTLS1.3対応が入ったため数字が伸びています。
サーバ側でTLS1.3を有効にはしていませんが、ClientHelloを見ることでどれくらいのクライアントが対応しているか調べることが出来ます。
TLS1.3では、TLS拡張を用いてバージョンネゴシエーションをします。多くのゲートウェイやファイアフォールといった機器がClientHello, ServerHelloのバージョンフィールドに1.3を正しく解釈できず誤作動することが知られているため、TLS1.3のバージョンネゴシエーションは専用の拡張を使用します(その他にも誤作動しないような工夫が多く入っています)
ハンドシェイクのClientHelloのsupported_versions拡張は具体的には下記のとおりです。WiresharkはすでにTLS1.3に対応しているのでパケットキャプチャすることで簡単に確認できます。
1 2 3 4 5 6 7 8 9 |
Extension: supported_versions (len=11) Type: supported_versions (43) Length: 11 Supported Versions length: 10 Supported Version: Unknown (0x9a9a) Supported Version: TLS 1.3 (draft 23) (0x7f17) Supported Version: TLS 1.2 (0x0303) Supported Version: TLS 1.1 (0x0302) Supported Version: TLS 1.0 (0x0301) |
TLS 1.3 (draft 23)と書かれているのがTLS1.3をサポートしている事を示しています。TLS1.3はまだRFCになっていませんので、Draft(草案)の23版であることを示しています。現在来ているTLS1.3に対応したハンドシェイクはdraft 23がほとんどです。
Unknown (0x9a9a)はGREASE ですので直接TLS1.3とは関係ありません。
このsupported_versionsを集計することでTLS1.3対応ハンドシェイク数を数えることが出来るということです。
気になるのが、では我々がTLS1.3を使えるようになるのはいつかという話です。
前述の通り現状はtls1.3 draft 23のハンドシェイクが来ているため、サーバ側も同一バージョンを用意できれば使用できます。ただし、OpenSSLはすでにdraft-26に進んでしまっています。
普通にRFCが出てくるのを待ったほうが良いでしょう。おそらく、その頃を目安にクラウドのマネージドサービスやCDNもTLS1.3のサポートが進んでいくものと思われます。
それでは、RFCはいつ出るのかと言うと、記事の最初に書いたとおり そろそろ出る と言われています。
歯切れが悪くてすみません。
今後も国内のTLS1.3状況については見ていきますので、何かあればアップデートしようと思います。
それではまた