SSL/TLSのまとめ
SSL/TLSはインターネット上の通信を安全に行うためにデータを暗号化して送受信する技術です。エンジニアとして最低限人にわかりやすく説明できるようにしておきたいので、言語化も兼ねてアウトプットしていきます。
SSL/TLSとは何か
インターネット上の通信を安全に行うためにデータを暗号化して送受信するプロトコルです。公開鍵暗号、秘密鍵暗号、デジタル署名、デジタル証明書の複数の技術を組み合わせて実現します。
TLS(Transport Layer Security)はSSLの後継プロトコルで、2023年4月10日現在TLS1.3が最新のバージョンです。
SSL/TLSでHTTPS通信する手順
クライアントとサーバはメッセージを用いてやり取りされます。
※TLS1.2とTLS1.3の違いについてはまだ調査できていません。
クライアント→サーバ①
クライアントからサーバへSSL/TLS通信を開始する通知 Celient Hello
メッセージには以下の情報が含まれています。
- バージョン
- 乱数
- セッションID
- クライアントが利用できる暗号化方式、圧縮方式
サーバ→クライアント①
サーバからの通知 Server Hello
以下の情報を通知します。
サーバ証明書の送信 Server Certificate
(省略される場合がある)
サーバ証明書をクライアントに送信します。
公開鍵を送信する(サーバ証明書がない場合)Server Key Exchange
(省略される場合がある)
サーバ証明書を保持していない、または、公開鍵が含まれていない場合に共通鍵を交換するための公開鍵を送信します。
クライアントの認証 Certificate Request
(省略される場合がある)
サーバがクライアントに対してクライアント認証用の証明書を要求します。
一連のメッセージの終了 Server Hello Done
クライアント→サーバ②
クライアント証明書の送信 Client Certificate
(省略される場合がある)
Certificate requestを受信した場合にクライアント証明書を送信します。
鍵の交換 Client Key Exchange
クライアントとサーバの共通鍵を生成します。
署名データの送信Certificate Verify
(省略される場合がある)
クライアント証明書に対する署名データとして送信します。
共通鍵の生成Change Cipher Spec
認証成功Finished
サーバ→クライアント②
共通鍵の生成Change Cipher Spec
認証成功Finished