shirobunのプログラミング雑記

プログラミングについて学んだことを書いていきます

SSLについて理解したことのまとめ

SSLについて理解したことを、下記サイトから抜粋してまとめてみます。
図解で学ぶネットワークの基礎:SSL編 | 日経 xTECH(クロステック)

Lesson1

  • SSLが持つ機能は二つある。
    • 「データの暗号化」
    • 「通信相手が信頼できることの確認」(認証)
  • SSLSSLクライアント)は,このWebブラウザとTCPの間に位置する。
  • SSLTLSの動作と機能はほぼ同じである。

Lesson2

  • SSLは,「共通鍵暗号」と「公開鍵暗号」という二つの暗号方式を組み合わせて利用している。
  • 共通鍵暗号」の特徴は,暗号化と復号の処理が軽いこと。
    • 実際にアプリケーション同士でやりとりするデータの暗号化/復号に利用される。
  • 暗号通信で使う鍵の共有(前処理)の処理順番
    1. クライアントは、サーバーにSSL通信の要求を送る
    2. サーバーは、自身の公開鍵が入った証明書をクライアントに返信
    3. クライアントは、入手したサーバーの公開鍵を使って「アプリケーション同士の暗号通信に使う共通鍵」を暗号化してサーバーに送る
    4. サーバーは、秘密鍵を使ってクライアントから送られてきた暗号データを復号して,「暗号通信に使う共通鍵」を取り出す
    5. この時点でクライアント&サーバーの両者は,誰にも知られずに共通鍵を持てたことになる

Lesson3

  • SSLは,大きく二つの仕様で成り立っている。
    • 「レコード・プロトコル
      • メッセージのフォーマット。
    • 「ハンドシェーク・プロトコル
      • メッセージを使って暗号通信を実現するまでの手順。
  • SSLで運ぶメッセージは「レコード」と呼ばれる
    • SSLのレコードは,ヘッダー部分とデータ部分に分かれている。
      • ヘッダー部分
        • データの種類(タイプ)
        • バージョン(SSLTLSか)
        • データ長の情報
      • データ部分
        • ハンドシェーク・プロトコルのメッセージ
        • 暗号通信時の暗号化データ
  • 一般的なSSLのやりとり
    1. クライアントは、サーバーに暗号通信で使う暗号方式などを提案する
    2. サーバーは、提案のあった方式から適切なものを一つ選んで返答する
    3. サーバーは、クライアントにCertificateメッセージを使ってサーバー証明書を送る
      • 証明書の情報を送り終えたら,そのことを知らせる
    4. クライアントは、入手したサーバー証明書からサーバーの公開鍵を取り出し、この公開鍵を使って暗号通信に使う共通鍵の基になる秘密の値(プレマスタ・シークレット)を暗号化して送信する。
    5. これがClientKeyExchangeメッセージである。
    6. サーバーは、この暗号化したデータを自身の秘密鍵で復号すると、プレマスタ・シークレットが出てくる。
    7. この時点で両者は、共通鍵の基となるプレマスタ・シークレットを共有できた。
    8. クライアントは、これまで決めた暗号方式の採用を宣言し、ハンドシェークの終了をサーバーに知らせる。
    9. これを受けたサーバーの動作もクライアントと同様。暗号方式の採用を宣言し、ハンドシェークの終了をクライアントに知らせる。
    10. これ以降クライアントとサーバーは、共有したプレマスタ・シークレットから共通鍵を生成し、その共通鍵を使って暗号通信を実施する。

Lesson4

  • 一番上位に位置する「ルート認証局」と呼ばれる認証局の証明書が必ず送られてくる。
  • パソコンにはあらかじめ、信頼できるルート認証局の証明書(自己証明書)が複数インストールされている。
  • クライアントにはサーバー証明書とルート認証局の証明書が送られてくる。
  • クライアントは、自分にインストールされている「信頼できるルート認証局の証明書」をチェックし、その中に一致する証明書があったら、そのルート認証局の証明書は信頼できると判断する。
  • ルート認証局の証明書の中に入っている公開鍵を使って、サーバー証明書に付けられた署名を検証する。