HTTP・HTTPS・TLS

更新日:

OSI参照モデルのアプリケーション層(7層)で、Webブラウザとサーバーがやり取りするためのプロトコル。

HTTPの基本

リクエスト/レスポンス形式で通信する。クライアント(ブラウザ)がリクエストを送り、サーバーがレスポンスを返す。

  • メソッド: リクエストの種類。GET(取得)、POST(送信・作成)、PUT(更新)、DELETE(削除)など
  • ステータスコード: レスポンスの結果を表す3桁の数字
    • 2xx: 成功(例: 200 OK)
    • 3xx: リダイレクト(例: 301 Moved Permanently)
    • 4xx: クライアント側のエラー(例: 404 Not Found)
    • 5xx: サーバー側のエラー(例: 500 Internal Server Error)

ステートレスとCookie

HTTPはステートレス(状態を保持しない)なプロトコル。1回のリクエストごとに独立していて、「さっきログインした人だ」という情報を自動では覚えていない。

そのため、ログイン状態などを維持するにはCookieにセッションIDなどを保存し、以降のリクエストに毎回付けて送ることで「同じユーザーの続きの操作」だとサーバー側が判別できるようにする。

HTTPSとTLS

HTTPS = HTTP + TLSによる暗号化。通信内容自体(リクエスト/レスポンスの形式)はHTTPと同じで、その下(トランスポート層との間)にTLSという暗号化の層を挟んでいる。

TLSが提供する3つの役割:

  • 機密性(暗号化): 通信内容を第三者に盗み見られても解読できないようにする
  • 完全性: 通信の途中でデータが改ざんされていないことを保証する
  • 認証: 通信相手が本当に意図したサーバーであること(なりすましでないこと)を証明する

TLSハンドシェイクと証明書(概要)

通信開始時に、TCPの3ウェイハンドシェイクの後、TLS独自のハンドシェイクが行われる。

  1. サーバーが証明書(公開鍵と、それが正当な発行元によるものだという証明)を提示
  2. クライアントが証明書を検証(信頼できる認証局=CAが発行したものか確認)
  3. 双方で暗号化に使う鍵を安全に共有
  4. 以降の通信は共有した鍵で暗号化される

証明書を発行する**CA(認証局)**が第三者として「このサーバーは本物です」と保証することで、なりすましサーバーへの接続を防いでいる。

関連