HTTPSとは?
HTTPS(Hypertext Transfer Protocol Secure)は、Webブラウザとサーバーの通信に使うHTTPの安全な版です。HTTPSはTLS(Transport Layer Security)でクライアントとサーバー間のすべての送信データを暗号化し、傍受や改ざんから機密情報を守ります。ブラウザの錠前アイコンで示され、金融取引を扱うサイトに限らず、すべてのWebサイトの標準になっています。HTTPSの仕組み
TLSハンドシェイク
1. Client Hello: ブラウザが対応する暗号スイートを提示して接続を開始する
2. Server Hello: サーバーが暗号スイートを選び、証明書を送る
3. 証明書の検証: ブラウザが証明書チェーンを検証する
4. 鍵交換: 非対称暗号でセッション鍵を確立する
5. 安全なチャネル: 対称暗号でデータ転送を開始する
暗号化の流れ
HTTP Request (unencrypted):
GET /login HTTP/1.1
Cookie: session=abc123
HTTPS Request (encrypted):
[Binary encrypted data - unreadable to interceptors]
HTTPSの利点
| 利点 | 説明 |
|---|---|
| データの暗号化 | 送信中のデータの盗聴を防ぐ |
| データの完全性 | 送信中の改ざんを検出する |
| 認証 | 証明書でWebサイトの身元を確認する |
| SEO上の利点 | GoogleがHTTPSサイトを順位付けで優先する |
| 利用者の信頼 | 錠前アイコンで安全性を示す |
| コンプライアンス | PCI-DSS、GDPRなどで要求される |
SSL/TLS証明書の種類
ドメイン認証(DV)
- ドメインの所有権だけを確認する
- 数分で発行される
- 最も安価(Let's Encryptなどで無料の場合もある)
- 基本的な暗号化を提供する
組織認証(OV)
- 組織の身元を確認する
- 発行に1〜3日かかる
- 証明書に組織名を表示する
- 中程度の信頼レベル
拡張認証(EV)
- 厳格な組織確認を行う
- 発行に1〜2週間かかる
- 最高レベルの信頼表示(歴史的には緑色のバー)
- 最も高価
HTTPSの導入
証明書の取得
1. Certificate Signing Request(CSR)を生成する
2. 認証局(CA)へCSRを提出する
3. ドメインまたは組織の確認を完了する
4. 証明書を受け取り、インストールする
サーバー設定
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:...;
}
HTTPからHTTPSへのリダイレクト
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
HTTPSのベストプラクティス
1. TLS 1.2以上を使う: 古いプロトコル(SSL 3.0、TLS 1.0/1.1)を無効にする
2. HSTSを導入する: HTTP Strict Transport SecurityヘッダーでHTTPSを強制する
3. 強力な暗号を使う: ECDHEとAES-GCMのスイートを優先する
4. OCSP staplingを有効にする: 証明書検証を高速化する
5. 証明書を早めに更新する: 期限切れによる停止を避ける
6. 混在コンテンツを更新する: すべてのリソースをHTTPSで読み込む
7. 証明書の有効期限を監視する: 自動監視ツールを使う
HTTPSでよくある問題
- 混在コンテンツの警告: HTTPSページがHTTPリソースを読み込んでいる
- 証明書の不一致: 証明書がドメイン名と一致しない
- 証明書の期限切れ: 証明書の有効期間を過ぎている
- チェーンの問題: 中間証明書が不足している
- プロトコルエラー: クライアントとサーバーのプロトコルが一致しない
HTTPSはもはや任意ではなく、コンテンツの種類に関係なくすべてのWebサイトに不可欠です。安全性、信頼、SEO上の利点を提供するため、導入は基本要件になっています。