httpsのサーバー認証


概要

curlでhttps通信したときに、そういえばhttps通信ってどういう仕組みだったっけー忘れたーと思ったのでいろいろ思い出してみたので簡単にめもめも。

登場人物

  • 認証局(CA)
  • サーバー
  • クライアント

いろいろ用語

  • SSL
    • 米ネットスケープ社が開発
  • TLS
    • SSLが普及しだした時にIETFがSSLを元にしてTLSとして標準仕様にする
    • SSLが先に普及したので、TLSのことをSSLと表記したりSSL/TLSと併記したりする
  • サーバー証明書
    • 証明書データをCAの秘密鍵でハッシュ化された署名が含まれている
    • サーバーの公開鍵が含まれている。
  • 認証局(CA)
    • 電子商取引事業者などに、暗号通信などで必要となるデジタル証明書を発行する機関
  • CA証明書
    • ブラウザには最初っから入っている。CAの公開鍵が含まれている
  • クライアント
    • 主にブラウザなど
    • ブラウザには主要な認証局の証明書(公開鍵)が登録されている。

通信の流れ

  • サーバー準備
    • サーバーはCAに申請してサーバーの公開鍵が含まれたサーバー証明書を作成してもらう。
  • サーバー認証
    • クライアントから通信くると上で作成したサーバー証明書をクライアントに送付
    • クライアントではサーバー証明書に含まれる署名からCA証明書の公開鍵でハッシュ値を抽出してサーバー証明書データのハッシュ値と比較する。値が同じであれば信頼のあるCAから生成されたサーバー証明書であり、そこで発行されたサーバー証明書は正当なものだと判断できサーバー証明書に含まれているサーバーの公開鍵の信頼性が担保される。
  • 通信内容の暗号化
    • 公開鍵と秘密鍵から生成したお互いしか知り得ない共通鍵で通信
  • 完全性の確認
    • 電子証明書のような仕組みで改ざんがないかチェックする

おわり

最初だけ公開鍵秘密鍵(公開鍵暗号)を使用して通信自体は共通鍵(共通鍵暗号)で行う。なぜかというと、公開鍵暗号のほうが負荷が大きいので。公開鍵暗号は認証などの場面でしか使用されない。