SSL/TLSの概要
SSL(Secure Sockets Layer)とは、WebサーバとWebブラウザの間の認証と暗号化を行うプロトコルです。尚、TLS(Transport Layer Security)は、SSLの標準化としてIETFにより策定されたプロトコルです。
SSL/TLSは、TCP(L4)とアプリケーション層(L5-L7)の間で動作し、SMTP、FTP、POP3、Telnetなど多くのTCP/IPアプリケーションに対応しています。
SSL/TLSの仕組み
サーバでは一般に、SSL対応のアプリケーションとSSL非対応のアプリケーションが混在しているので、両者を区別する必要があります。例えば、Web通信の場合はポート番号で区別されており、SSL対応のアプリケーションはTCP80番(http)、SSL非対応のアプリケーションはTCP443番(https)が使われます。
セッション&コネクション
セッションは、サーバとクライアント間で新たにマスタシークレット(以下で説明)が共有される毎に新しく生成されます。具体的には、クライアント上でブラウザを立ち上げ、サーバに接続する毎に新たなセッションが作成されます。
コネクションは、1つのセッションに複数存在し、コネクションごとに暗号鍵などが新たに生成されます。クライアント側ではコネクションごとに異なるポート番号が割り当てられます。
プリマスタシークレット&マスタシークレット
プリマスタシークレットとは、暗号化通信に使用する暗号鍵を生成する元になる情報で、クライアントが生成します。
マスタシークレットは、プリマスタシークレットとサーバ/クライアントの乱数を元に、サーバとクライアントの双方で生成します。マスタシークレットの生成には、PRF(疑似乱数関数)が使用されます。
通信の確立手順
SSL/TLS通信のセッション及びコネクション確立するため、ハンドシェイクが行われますが、この目的は以下になります。
- サーバの認証
- 暗号化アルゴリズムの決定
- 暗号化鍵とMAC鍵の作成
サーバ証明書を用いる場合の手順は以下になります。尚、通信の方向の「C→S」はクライアントからサーバ、「S→C」はサーバからクライアントへの通信を表します。
項 | 名称 | 方向 | 機能 |
① | Client Hello | C→S | 利用可能な暗号化アルゴリズムの一覧を送信 |
② | Server Hello | S→C | 一覧から暗号化アルゴリズムを選択し通知 |
③ | Certificate | S→C | サーバ証明書を送付 |
④ | Server Hello Done | S→C | 2項から始まるメッセージの完了を通知 |
⑤ | Client Key Exchange | C→S | プリマスタシークレットをサーバ証明書の公開鍵で暗号化し送付 |
⑥ | Change Cipher Spec | C→S | マスタシークレット、MAC鍵、暗号鍵、初期ベクトル(IV)を生成し、暗号化の準備が整ったことを通知 |
⑦ | Finished | C→S | 鍵交換と認証が完了したことを通知、暗号化通信を開始 |
⑧ | Change Cipher Spec | S→C | マスタシークレット、MAC鍵、暗号鍵、初期ベクトル(IV)を生成し、暗号化の準備が整ったことを通知 |
⑨ | Finished | C→S | 鍵交換と認証が完了したことを通知、暗号化通信を開始 |