Carpe Diem

備忘録

SSL/TLS周りで必要な知識

概要

SSL/TLSでは

など色々なファイルや用語があり、混乱しやすいのでまとめます。

認証局(CA)について

ルートCA

認証局です。
この認証局が発行するルート証明書は自身が署名します。
いわゆるオレオレ証明書になります。
一般的には社会的に信用された企業がルート認証局となります。
ブラウザなどTLSのクライアントサイドは一般的なルート証明書をデフォルトで持っています。

中間CA

ルート認証局に認められた認証局です。
中間CAがあることで運用上の手続きがスムーズになったり、問題が起きた時のrevokeがしやすいといったセキュリティ的なメリットなどがあります。
詳しくは以下のサイトで説明されてます。

中間証明書の必要性、証明機関(認証局)の階層化の理由 | SEの道標

証明書について

ルート証明書・中間証明書・サーバ証明書の関係

こちらのサイトの図が非常に分かりやすいです。

f:id:quoll00:20180717010336p:plain

ref: プライベートルート証明書・中間証明書・サーバ証明書の作り方 - Apache 2.4系でHTTP/2対応サーバを構築してみるテスト。

各証明書等のインストール先

各証明書のインストール先は以下です。

証明書 インストール先
ルート証明書 クライアント
中間証明書 サーバ
サーバ証明書 サーバ
サーバ証明書秘密鍵 サーバ

証明書の検証フロー

  1. サーバ証明書は中間CAから発行されている
  2. 中間CAの中間証明書はルートCAから発行されている
  3. クライアントがルートCAのルート証明書を持っていれば遡ってサーバ証明書の正当性が保証できる
    1. ルート証明書=ルートCAの公開鍵
    2. ルートCAの公開鍵で中間証明書にあるルートCAの署名を検証
    3. 中間証明書が正当と分かったので、中間CAの公開鍵を使える
    4. 中間CAの公開鍵でサーバ証明書にある中間CAの署名を検証
    5. サーバ証明書が正当と分かる

と言う感じですね。

TLS接続の確立フロー

f:id:quoll00:20180728105037p:plain

ref: SSLの仕組み | 基礎から学ぶSSL入門ガイド | CSP SSL

  1. クライアントがサーバに接続要求
  2. サーバはクライアントに中間証明書・サーバ証明書を渡す
  3. 前述の検証フローで正しいサーバ証明書と分かる
  4. クライアント側で暗号通信用の共通鍵を用意
  5. サーバ証明書にある公開鍵を使って、共通鍵を暗号化してサーバに渡す
  6. 暗号化された共通鍵を、サーバ証明書を作った時の秘密鍵で復号
  7. 共通鍵をクライアント・サーバで保持できたので暗号化通信が可能

と言う感じです。

まとめ

TLSで必要な用語やフローを説明しました。

ソース