HTTP と HTTPS の根本的な違い

HTTP(HyperText Transfer Protocol)は、ブラウザとWebサーバーがデータをやり取りするためのプロトコルです。しかし HTTP には暗号化がなく、通信内容は 平文(プレーンテキスト) でネットワーク上を流れます。

これは、カフェのWi-Fiのように共有ネットワーク上に攻撃者がいる場合、ユーザーが入力したパスワードや個人情報をそのまま傍受できることを意味します。これを 盗聴攻撃(Eavesdropping) と呼びます。

HTTPS(HTTP Secure) は、HTTP に TLS(Transport Layer Security) による暗号化を加えたプロトコルです。

HTTP  :  ブラウザ ──(平文)──────────── Webサーバー
HTTPS :  ブラウザ ──(暗号化データ)──── Webサーバー

              途中で傍受しても解読不可能
ポイント

「SSL(Secure Sockets Layer)」は TLS の前身のプロトコルです。SSL 2.0・3.0 はすでに脆弱性が発見されており使用禁止です。現在一般的に「SSL証明書」と呼ばれているものは、技術的には TLS 証明書です。TLS 1.2 以上が推奨され、2025年現在 TLS 1.3 が最新の推奨バージョンです。


TLS ハンドシェイクの仕組み

HTTPS 接続を確立する際、ブラウザとサーバーの間で以下のような「ハンドシェイク」が行われます。

TLS 1.3 の簡略化されたハンドシェイク

クライアント(ブラウザ)              サーバー

1. ClientHello
   (対応暗号スイート、乱数)  →

                              2. ServerHello
                                 (選択した暗号スイート、サーバー証明書)  ←

3. 証明書の検証
   (認証局の署名を確認)

4. 暗号化通信の開始
   (共有鍵で対称暗号化)    ⇄   (暗号化された通信)

証明書で「本物のサーバー」を確認する

TLS の重要な役割のひとつが サーバー認証です。悪意のある第三者が「私が google.com です」と主張しても、正規の認証局(CA: Certificate Authority) が署名した証明書がなければブラウザは信頼しません。

主な認証局:DigiCert、Let’s Encrypt(無料・自動化)、Sectigo、GlobalSign など


証明書の種類と信頼レベル

証明書には審査レベルによって3種類あります。

種類略称確認内容用途
ドメイン認証DVドメインの所有者確認のみ個人サイト・ブログ
組織認証OV企業の実在確認一般的な企業サイト
拡張認証EV厳格な企業審査銀行・EC サイト
注意

「南京錠マーク = 完全に安全」ではありません。 Let’s Encrypt の普及により、フィッシングサイトでも無料で HTTPS 証明書を取得できます。HTTPS は「通信の暗号化」を保証しますが、「接続先が正規サイトであること」は保証しません。URL を必ず確認する習慣が重要です。


ブラウザでの証明書確認方法

Chrome でサイトの証明書を確認するには:

  1. アドレスバーの鍵アイコンをクリック
  2. 「この接続は保護されています」→「証明書は有効です」をクリック
  3. 発行先・発行者・有効期限を確認

コマンドラインでの確認

openssl で証明書情報を確認

openssl s_client -connect example.com:443 -showcerts < /dev/null 2>/dev/null
| openssl x509 -noout -text | grep -E “Subject:|Issuer:|Not Before|Not After”

TLS バージョンと暗号スイートを確認

openssl s_client -connect example.com:443 -tls1_3

nmap で TLS の設定状況をスキャン

nmap —script ssl-enum-ciphers -p 443 example.com


HTTPS でも注意が必要なケース

1. フィッシングサイトの HTTPS 化

前述の通り、悪意のあるサイトも HTTPS を使えます。paypa1.com(1と小文字L)のような typosquatting ドメインでも HTTPS 証明書は取得できます。

対策: URL のドメイン部分(特に . の直前の単語)を必ず確認する。

2. 中間者攻撃(MITM)

企業のプロキシや一部のウイルス対策ソフトは、HTTPS 通信を一度復号化して検査します(SSL/TLS インスペクション)。この場合、ブラウザには プロキシのルート証明書 が表示され、オリジナルの証明書は見えません。

ブラウザ ─(プロキシ証明書で暗号化)─ プロキシ ─(オリジナルで暗号化)─ サーバー

                              ここで通信を復号・検査

対策: 信頼できないネットワーク(公共Wi-Fi)では機密情報の入力を避ける。企業プロキシの場合は管理者に確認する。

3. 証明書の有効期限切れ

証明書には有効期限があります。期限が切れると、ブラウザは「この接続は安全ではありません」と警告を表示します。

警告

「この接続は安全ではありません」という警告が表示されたサイトに、パスワードや個人情報を絶対に入力しないでください。 「詳細設定」→「安全でないサイトへ進む」は開発者向けの機能であり、一般利用者は進んではいけません。


HTTP Strict Transport Security(HSTS)

HSTS はブラウザに「このドメインは必ず HTTPS で接続する」と覚えさせる仕組みです。サーバーが以下のようなレスポンスヘッダーを送ることで設定されます。

サイトの HSTS ヘッダーを確認

curl -I https://example.com | grep -i “strict-transport-security”

出力例:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

max-age=31536000 → 1年間、HTTPS接続を強制

preload → ブラウザの HSTS プリロードリストに登録申請可能

HSTS が設定されたサイトでは、http:// でアクセスしようとしても自動的に https:// にリダイレクトされます。一度確立されると、最初の接続(TOFUと呼ばれる)も含めて保護されます。


実際の HTTPS 採用率(2025年)

  • Google Chrome での HTTPS ページ閲覧割合:99%以上
  • Webサイト全体での HTTPS 対応率:約87%
  • Let’s Encrypt によって無料・自動化された証明書取得が普及したことで、小規模サイトでも HTTPS が標準となりました
ヒント

個人でサイトを公開する場合は必ず HTTPS を使用してください。 Let’s Encrypt を使えば無料で証明書を取得でき、多くのホスティングサービスでは自動更新も設定できます。HTTP のサイトは Google 検索でもマイナス評価を受け、ブラウザにも「保護されていない通信」と表示されます。


まとめ:利用者として知っておくべきこと

  1. 鍵マークだけを信用しない — URL のドメインを必ず確認する
  2. 証明書の警告は無視しない — 「安全でない」警告はリスクのサインだと思う
  3. 公共Wi-FiではVPNを使う — 暗号化されていない Wi-Fi で HTTPS だけに頼るのは危険
  4. HTTP サイトに個人情報を入力しない — ログインや決済は必ず HTTPS のサイトで
  5. フィッシングURLに注意google.comg00gle.com を見分ける習慣をつける

理解度チェック

TLS ハンドシェイクにおいて、サーバー証明書の役割はどれですか?

理解度チェック

南京錠マーク(HTTPS)が表示されているサイトについて、正しい説明はどれですか?