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独自のハンドシェイクが行われる。
- サーバーが証明書(公開鍵と、それが正当な発行元によるものだという証明)を提示
- クライアントが証明書を検証(信頼できる認証局=CAが発行したものか確認)
- 双方で暗号化に使う鍵を安全に共有
- 以降の通信は共有した鍵で暗号化される
証明書を発行する**CA(認証局)**が第三者として「このサーバーは本物です」と保証することで、なりすましサーバーへの接続を防いでいる。