🔒

SSL 通信とそれを実現する各種証明書についての備忘録

2022/11/03に公開

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