この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:9
ページ更新者:guest
更新日時:2026-06-11 07:29:05

タイトル: HTTPS
SEOタイトル: HTTPS完全ガイド(TLS/SSL証明書/HSTS/HTTP3/Let's Encrypt)

この記事の要点
  • HTTPS = HTTP over TLS。HTTP 通信を TLS で暗号化したプロトコル。標準ポート 443
  • TLS は 暗号化 (Confidentiality) + 改ざん検知 (Integrity) + サーバ認証 (Authenticity) を提供
  • サーバ証明書は CA (Let"s Encrypt / DigiCert / Sectigo 等) が発行。ブラウザはルート CA を信頼
  • TLS 1.2 がデファクト、TLS 1.3 で高速化(1-RTT / 0-RTT)+ 古い暗号 削除
  • HSTS ヘッダで「以後 HTTPS のみ」をブラウザに記憶させ、SSL Strip 攻撃を防ぐ
  • Certificate Transparency (CT) ログで不正発行を監視。Chrome は CT 必須
  • HTTP/3 (QUIC) は UDP + TLS 1.3 統合、ハンドシェイク短縮・ヘッドオブラインブロッキング解消

HTTPS とは

HTTPS(Hypertext Transfer Protocol Secure)は、HTTP を TLS(Transport Layer Security)で暗号化したプロトコルです。通信内容は暗号化され、改ざんを検知でき、サーバの正当性が証明書で保証されます。標準ポートは 443

HTTP:  クライアント <─平文─> サーバ          ポート 80
HTTPS: クライアント <─暗号化─> サーバ        ポート 443
                   └ TLS による保護

TLS と SSL の関係

プロトコル状態
SSL 2.01995廃止
SSL 3.01996廃止 (POODLE 攻撃)
TLS 1.01999廃止 (PCI DSS で禁止)
TLS 1.12006廃止
TLS 1.22008★ 標準
TLS 1.32018★ 推奨(新しい)

「SSL」という言葉は今も習慣的に使われますが、実態は TLS です(「SSL 証明書」も実質は TLS 証明書)。

TLS ハンドシェイク(概要)

TLS 1.2 (2-RTT)

クライアント                                      サーバ
    │  ClientHello (対応する暗号スイート列挙)      │
    ├─────────────────────────────────────────────▶│
    │  ServerHello (採用暗号) + 証明書             │
    │  + サーバ鍵交換パラメータ                    │
    │◀─────────────────────────────────────────────┤
    │  クライアント鍵交換 + Finished               │
    ├─────────────────────────────────────────────▶│
    │  Finished                                     │
    │◀─────────────────────────────────────────────┤
    │  暗号化された HTTP データ                    │
    │◀────────────────────────────────────────────▶│

TLS 1.3 (1-RTT, 0-RTT 再接続)

暗号スイートが整理され、Forward Secrecy が必須化。ハンドシェイクが1 往復で完了、再接続は0 往復でデータ送信できる(ただし 0-RTT はリプレイ攻撃に注意)。

証明書 (Certificate)

サーバの公開鍵と「このドメインの所有者であること」を認証局 (CA) が署名した電子文書。ブラウザは OS / ブラウザ内蔵のルート CA を信頼の起点として検証します。

検証レベル確認内容主用途
DV (Domain Validation)ドメイン所有のみ個人ブログ、Let"s Encrypt
OV (Organization Validation)組織実在企業サイト
EV (Extended Validation)組織を厳格審査金融、EC(緑バー表示は廃止)

Let"s Encrypt で無料 SSL

# Ubuntu / Nginx の例
sudo apt install -y certbot python3-certbot-nginx

# 取得 + Nginx 自動設定
sudo certbot --nginx -d example.com -d www.example.com

# 自動更新は systemd timer で既定設定済
sudo systemctl status certbot.timer

# 手動で更新テスト
sudo certbot renew --dry-run

# 取得済証明書一覧
sudo certbot certificates

Nginx 最小設定

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 推奨設定(TLS 1.2 / 1.3 のみ)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;

    # HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

    # その他セキュリティヘッダ
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy strict-origin-when-cross-origin;
}

# HTTP → HTTPS リダイレクト
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

HSTS(HTTP Strict Transport Security)

「このサイトは今後 HTTPS でしかアクセスしない」とブラウザに記憶させるレスポンスヘッダ。SSL Strip 攻撃や中間者攻撃を防ぎます。

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

意味:
  max-age=63072000        - 2 年間 HTTPS 強制
  includeSubDomains       - サブドメインも対象
  preload                 - HSTS Preload List 登録対象(hstspreload.org)

HSTS Preload List に登録すると、新規ユーザの初回アクセスから HTTPS が強制されます(ブラウザにハードコード)。

Certificate Transparency (CT)

証明書の発行を公開ログに記録する仕組み。不正発行(フィッシング用偽証明書など)を CT ログ監視で検知できます。Chrome は 2018 年から CT を必須化。

# 自社ドメインの証明書発行履歴を crt.sh で確認
curl -s 'https://crt.sh/?q=example.com&output=json' | jq

# 知らない発行があれば不正の可能性 → CA に異議申し立て

OCSP / OCSP Stapling

  • OCSP: 証明書の失効状態をリアルタイム問い合わせするプロトコル
  • クライアントから CA への直接問い合わせは遅延 + プライバシー問題
  • OCSP Stapling: サーバが定期的に取得した有効性応答を、TLS ハンドシェイクに同梱して配布する仕組み(高速 + プライバシー保護)

HTTP/2 と HTTP/3

バージョントランスポート特徴
HTTP/1.1TCP + TLSテキストプロトコル、ヘッドオブラインブロッキング有
HTTP/2TCP + TLSバイナリ、多重化、ヘッダ圧縮 (HPACK)
HTTP/3UDP + QUIC (TLS 1.3 統合)0-RTT、コネクション移行、L4 でロスト 1 ストリームのみ影響

SSL Labs テストで自社の品質確認

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

評価ポイント:
- 証明書チェーン完全性
- プロトコル (TLS 1.0/1.1 は減点)
- 鍵交換 (Forward Secrecy)
- 暗号スイート強度
- HSTS / OCSP Stapling / CT 対応

A+ を目標に設定。F は即対応。

動作確認コマンド

# 証明書情報を表示
openssl s_client -connect example.com:443 -servername example.com < /dev/null \
  | openssl x509 -noout -text

# 有効期限だけ取得
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>&1 \
  | openssl x509 -noout -dates

# サポートするプロトコル一覧
nmap --script ssl-enum-ciphers -p 443 example.com

# テストで TLS バージョン指定
curl --tlsv1.2 https://example.com
curl --tlsv1.3 https://example.com

FAQ

Q: Let"s Encrypt は本番運用しても大丈夫?
A: 大手企業も多数採用していて問題ありません。注意点は3 ヶ月有効で自動更新必須、レート制限(同ドメイン週 50 件)あり。

Q: HTTPS にすると遅くなる?
A: TLS 1.3 + HTTP/2 / 3 ならむしろ高速。SEO 上も Google は HTTPS をランキング要因に。HTTP のままにする理由は無い。

Q: 自己署名証明書はどう違う?
A: CA の署名がないため、ブラウザが警告を出します。社内ツールや開発環境のみで使用、公開サービスでは絶対 NG。