面接で聞かれたHTTPとHTTPSの違いを整理する ― 暗号化されているだけ、で終わらせない
はじめに
こんにちは、YSです。
今回は HTTPとHTTPSの違い について整理します。
きっかけは、面接でこんな感じの質問をされたことです。
HTTPとHTTPSの違いは何ですか?
最初に思いつく答えは、
HTTPSは暗号化されているHTTPです
だと思います。
もちろん間違いではありません。
ただ、面接で聞かれたときにそれだけで終わると、少し浅く聞こえるかもしれません。
この記事では、HTTPとHTTPSの違いを 「通信を安全にするために、HTTPSでは何が追加されているのか」 という観点で整理してみます。
まずHTTPとは
HTTPは、WebブラウザとWebサーバーがやり取りするための通信ルールです。
たとえば、ブラウザでWebページを開くとき、裏側ではだいたいこういうやり取りが起きています。
ブラウザ: このページをください
サーバー: はい、HTMLを返します
APIを叩くときも同じです。
const res = await fetch("/api/companies");
const data = await res.json();
この fetch も、HTTPのルールに従ってリクエストを送り、サーバーからレスポンスを受け取っています。
つまりHTTPは、
クライアントとサーバーが、リクエストとレスポンスをやり取りするためのルール
です。
HTTPの問題点
HTTPの大きな問題は、通信内容がそのまま流れることです。
たとえば、ログインフォームでメールアドレスやパスワードを送るとします。
HTTPのままだと、その通信経路上で内容を見られるリスクがあります。
イメージとしては、ハガキで個人情報を送るようなものです。
相手には届きますが、途中で見ようと思えば見えてしまう。
HTTPには、主に次のような不安があります。
| 観点 | HTTPで起きる問題 |
|---|---|
| 盗聴 | 通信内容を第三者に見られる可能性がある |
| 改ざん | 通信内容を書き換えられる可能性がある |
| なりすまし | 本当に目的のサーバーなのか確認しづらい |
そこで使われるのがHTTPSです。
HTTPSとは
HTTPSは、HTTPに TLS という仕組みを組み合わせたものです。
ざっくり言うと、
HTTPS = HTTP + TLS
です。
昔はSSLという名前を聞くことも多かったですが、現在はTLSと呼ぶのが正確です。
ただ、日常的には「SSL証明書」という言い方もまだよく使われています。
HTTPSでは、HTTPで送るリクエストやレスポンスを、そのまま流すのではなく、TLSによって安全にやり取りします。
HTTPSで追加される3つの安全性
HTTPSで大事なのは、単に「暗号化されている」だけではありません。
主に次の3つが重要です。
| 観点 | 何を防ぐか | ざっくり |
|---|---|---|
| 暗号化 | 盗聴 | 通信内容を読まれにくくする |
| 改ざん検知 | 改ざん | 通信内容が途中で変えられていないか確認する |
| サーバー認証 | なりすまし | 本当に目的のサーバーか確認する |
順番に見ていきます。
1. 暗号化: 通信内容を読まれにくくする
HTTPSでは、通信内容が暗号化されます。
たとえば、ログイン時にパスワードを送る場合でも、そのままの文字列が通信経路に流れるわけではありません。
第三者が途中で通信を覗いても、内容を理解しづらい形になります。
HTTPがハガキだとすると、HTTPSは封筒に入れて送るイメージです。
もちろん、封筒に入っているから絶対に安全という話ではありません。
ただ、少なくとも通信経路上で中身を簡単に読まれるリスクはかなり下がります。
2. 改ざん検知: 途中で書き換えられていないか確認する
HTTPSでは、通信内容が途中で改ざんされていないかも確認できます。
たとえば、サーバーが返したHTMLやJavaScriptが、通信の途中で別の内容に差し替えられたら危険です。
ログインページに見せかけて、入力情報を別の場所へ送るようなコードを混ぜられるかもしれません。
HTTPSでは、通信内容が途中で変えられていないかを検知する仕組みがあります。
つまりHTTPSは、
見られにくくするだけでなく、勝手に書き換えられていないかも確認する
という役割を持っています。
3. サーバー認証: 本当にそのサイトか確認する
HTTPSでは、サーバー証明書を使って、接続先が本当に正しいサーバーなのかを確認します。
ブラウザで https://example.com にアクセスしたとき、ブラウザはサーバーから証明書を受け取ります。
そして、その証明書が信頼できる認証局によって発行されているか、ドメイン名が一致しているかなどを確認します。
これによって、
自分がアクセスしている相手は、本当にそのドメインのサーバーなのか
を判断できます。
ここがあるので、HTTPSはなりすまし対策にもなります。
HTTPとHTTPSの違いを表で整理する
HTTPとHTTPSの違いをざっくりまとめると、こうです。
| 観点 | HTTP | HTTPS |
|---|---|---|
| URL | http:// |
https:// |
| 標準ポート | 80 | 443 |
| 暗号化 | なし | あり |
| 改ざん検知 | 弱い | あり |
| サーバー認証 | 弱い | 証明書で確認する |
| 用途 | 基本的には非推奨 | 現在のWebでは標準 |
今のWebでは、ログインや決済があるサイトはもちろん、通常のWebサイトでもHTTPSが基本です。
ブラウザによっては、HTTPのページに対して「保護されていない通信」と表示されることもあります。
HTTPSなら全部見えないのか
ここは少し注意が必要です。
HTTPSでは、パスやクエリ、リクエストボディ、レスポンス内容などは暗号化されます。
たとえば、次のようなURLにアクセスしたとします。
https://example.com/users/123?tab=profile
HTTPSでは、/users/123?tab=profile のような細かいリクエスト内容は基本的に保護されます。
一方で、通信の都合上、接続先のドメイン名など一部の情報は見える場合があります。
つまりHTTPSは、
通信内容を安全にする仕組みであって、通信している事実を完全に隠す仕組みではない
と理解しておくとよさそうです。
面接レベルでは、まずは「通信内容は暗号化される。ただし、すべての情報が完全に隠れるわけではない」くらいで十分だと思います。
面接で答えるなら
自分が面接で答えるなら、次のように言います。
HTTPは、クライアントとサーバーがリクエストとレスポンスをやり取りするための通信プロトコルです。
HTTPSは、そのHTTPにTLSを組み合わせて安全性を高めたものです。
HTTPSでは通信内容が暗号化されるので盗聴されにくくなり、改ざん検知やサーバー証明書によるなりすまし対策もできます。
そのため、現在のWebではHTTPSを使うのが基本です。
短く答えるなら、
HTTPSは、HTTPにTLSを組み合わせて、暗号化・改ざん検知・サーバー認証をできるようにしたものです。
くらいで良さそうです。
まとめ
HTTPとHTTPSの違いは、単にURLの先頭が違うだけではありません。
- HTTPは、リクエストとレスポンスをやり取りするための通信ルール
- HTTPのままだと、盗聴・改ざん・なりすましのリスクがある
- HTTPSは、HTTPにTLSを組み合わせたもの
- HTTPSでは、暗号化・改ざん検知・サーバー認証ができる
- 今のWebではHTTPSが基本
面接で「HTTPとHTTPSの違いは?」と聞かれたら、
HTTPSは暗号化されているHTTPです
で止めずに、
TLSによって、暗号化・改ざん検知・サーバー認証を行えるHTTPです
まで言えると、かなり整理された答えになると思います。
Discussion