SSLサーバ証明書の動きを整理してみた

Posted by engineersomurie on Thursday, March 21, 2019

TOC

はじめに

SSLサーバ証明書の動きがいまいち理解できていなかったため整理した。

認識誤りがあればコメント頂けると助かります。

証明書の用途

主にウェブサイト運営団体の電子的な身分証明書として使用する。SSL通信を実現する。

主要キーワードと役割

ルート証明書

ルート認証局(ルートCA)が発行する証明書。Webサーバが公開している公開鍵が本当に該当のWebサーバのものか証明する。

Webサーバ

クライアントとHTTPSで通信したい。秘密鍵と公開鍵を持つ

クライアント

Webサーバにアクセスする側。WebサーバとHTTPSで通信したい。ルート証明書を事前にインストールしている

SSL通信までの動き

事前手続き

  • クライアントにルート証明書を設定
    • mkcertを使い、ルート証明書の生成、インストール、ルート証明書を使ったWebサーバ証明書への署名をまとめて行う
    • (通常はルート証明書が既にクライアントに設定されている)
    • (通常はWebサーバ管理者が依頼し、ルート認証局がWebサーバのデジタル証明書に署名を行う)

Webサーバへの公開鍵・秘密鍵の登録

  • mkcertで作成された秘密鍵、公開鍵をWebサーバに登録する

Webサーバのサーバ証明書を取得

  • クライアント->Webサーバ HTTPSリクエストを発行
  • クライアント<-Webサーバ Webサーバのサーバ証明書を送付

サーバ証明書の認証

  • クライアント ルート証明書の公開鍵からWebサーバのサーバ証明書についた署名(ハッシュ値)を復号する
  • クライアント 受信データをハッシュ関数を用いてハッシュ値を求める
  • クライアント 上記2点のハッシュ値が一致すればWebサーバの公開鍵(デジタル証明書)が正しいと判断する

共通鍵の交換

  • クライアント Webサーバの公開鍵を使ってプレマスターシークレットを暗号化
  • Webサーバ Webサーバの秘密鍵を使ってプレマスタシークレットを復号化
  • クライアント・Webサーバ お互いにプレマスタシークレットから共通鍵を生成

補足

CRL

  • 認証局から一定周期で発行され、クライアント側からLDAP、HTTP、FTPなどで取得する
  • CRLには次回CRL発行タイミング(クライアントからの次アクセス時間)が記載されている

      (mkcertではこれがかなり先の日付?)

証明書に含まれる情報

  • 公開鍵の情報
  • コモンネーム
  • 公開鍵の所有者情報
  • 所有者を証明した認証局の情報
  • 証明書の有効期限
  • 証明書のシリアル番号
  • 証明書の失効リスト参照先 詳細は

こちら参照