🔒
SSL 通信とそれを実現する各種証明書についての備忘録
SSL 通信とは
- SSL 通信 (SSL: Secure Socket Layer) とは、インターネット上でデータを暗号化して送受信する仕組みのこと
- SSL 通信を実現するまでの基本的な流れは以下 (★)
- ブラウザからサーバに SSL 通信のリクエストを送る
- サーバからブラウザに公開鍵 + SSL/TLS サーバ証明書を送る
- ブラウザは受け取った SSL/TLS サーバ証明書を検証し (※1 詳細な手順は後述)、問題がなければ共通鍵を生成、送られてきた公開鍵を使って共通鍵を暗号化し、サーバに送る
- サーバは受け取った共通鍵を秘密鍵を使って複合化
- 以後ブラウザとサーバ間の通信は、共通鍵を使って暗号化・復号化される
SSL/TLS サーバ証明書とは
- SSL/TLS サーバ証明書とは SSL 通信に用いられる証明書のことであり、認証局によって発行され、サーバ管理者によってサーバに設置されている
- SSL/TLS サーバ証明書を発行する手順は以下
- サーバ管理者は秘密鍵と CSR (Certificate Signing Request: 認証局に対する証明書への署名依頼) を生成、秘密鍵は手元に置きつつ、CSR を認証局に送る
- 認証局は自身の秘密鍵を用いて CSR への署名を行い (※2 詳細な手順は後述。この署名済みの証明書 = SSL/TLS サーバ証明書)、発行された SSL/TLS サーバ証明書をサーバ管理者に送る
- サーバ管理者は自身が発行した秘密鍵と、認証局から受け取った SSL/TLS サーバ証明書をサーバに設置する
- 認証局による CSR への署名の流れは以下 (※2 の説明)
- CSR のデータをハッシュ化する
- 生成されたハッシュ値を秘密鍵で暗号化する
- 暗号化されたハッシュ値 + 元の CSR = SSL/TLS サーバ証明書 とする
- SSL/TLS サーバ証明書を検証する手順は以下 (※1 の説明)
- クライアントは認証局の公開鍵を用いて SSL/TLS サーバ証明書の中の「暗号化されたハッシュ値」の部分を複合化する
- 同時に SSL/TLS サーバ証明書の中の「元の CSR」の部分をハッシュ化し、ハッシュ値を取得する
- 両者を比較して、一致すれば有効と見なす (実際には他の観点での検証も行っている)
中間認証局、ルート認証局とは
- 認証局による CSR への署名 (※2 の部分) は「中間認証局」と呼ばれる機関によって行われることが多い
- では、中間認証局の身元は誰が保証してくれるのか? というと、さらに上位の認証局が保証する
- それを繰り返していって、最終的には「ルート認証局」に到達する
- では、ルート認証局の身元は誰が保証してくれるのか? というと、自分自身で保証する (いわゆる自己証明)
ルート証明書、中間証明書とは
- ルート証明書には中間証明書の検証に必要な検証鍵が、中間証明書には SSL/TLS サーバ証明書の検証に必要な検証鍵が含まれており、SSL 通信を実現するときに利用される
- ルート証明書は各 OS やブラウザに標準搭載されており、アップデートなどのタイミングで更新される
SSL 通信を実現するまでの詳細な流れ
- 以上を踏まえ、SSL 通信を実現するまでの詳細な流れは以下 (基本的な流れは前述の ★ の通りであるが、認証局の階層構造を踏まえると次のような流れになる)
- ブラウザからサーバに SSL 通信のリクエストを送る
- サーバからブラウザに公開鍵 + SSL/TLS サーバ証明書 + 中間証明書を送る
- ブラウザはルート証明書に含まれる公開鍵を用いて中間証明書を検証する
- 次に中間証明書に含まれる検証鍵を用いて SSL/TLS サーバ証明書を検証する
- 以下前述した ★ の流れ
Discussion