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 でサイトの証明書を確認するには:
- アドレスバーの鍵アイコンをクリック
- 「この接続は保護されています」→「証明書は有効です」をクリック
- 発行先・発行者・有効期限を確認
コマンドラインでの確認
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 検索でもマイナス評価を受け、ブラウザにも「保護されていない通信」と表示されます。
まとめ:利用者として知っておくべきこと
- 鍵マークだけを信用しない — URL のドメインを必ず確認する
- 証明書の警告は無視しない — 「安全でない」警告はリスクのサインだと思う
- 公共Wi-FiではVPNを使う — 暗号化されていない Wi-Fi で HTTPS だけに頼るのは危険
- HTTP サイトに個人情報を入力しない — ログインや決済は必ず HTTPS のサイトで
- フィッシングURLに注意 —
google.comとg00gle.comを見分ける習慣をつける
TLS ハンドシェイクにおいて、サーバー証明書の役割はどれですか?
南京錠マーク(HTTPS)が表示されているサイトについて、正しい説明はどれですか?