2.

サイト SSL/TLS 化 (HTTPS) 完全ガイド(Let's Encrypt / ACM / Cloudflare / HSTS)

編集
この記事の要点
  • Let's Encrypt の無料証明書 + Certbot が個人サイトの定番(90 日有効、cron で自動更新)
  • AWS なら ACM (AWS Certificate Manager) が無料 + 自動更新(ALB / CloudFront 用)
  • Cloudflare をプロキシ前段に置けばSSL 終端を Cloudflare 側で無料化
  • Mixed Content 警告: HTTPS ページ内に http リソースがあるとブロック → // or https:// で参照
  • HSTS ヘッダ: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • SEO 効果: Google は HTTPS をランキング要因に明言(2014 ~)

なぜ SSL/TLS 化(HTTPS 化)が必要か

  • 通信内容の盗聴防止: パスワード / クレジットカード / Cookie の保護
  • 改ざん検知: 中間者攻撃で広告挿入 / 偽ページ表示を防止
  • SEO ランキング要因: Google は HTTPS をプラスシグナルと公言
  • ブラウザ警告回避: Chrome / Firefox は HTTP サイトに「保護されていない通信」表示
  • HTTP/2 / HTTP/3 利用条件: 主要ブラウザは HTTPS のみで HTTP/2 を有効化
  • 新ブラウザ API の動作条件: Service Worker / WebRTC / Geolocation 等は HTTPS 必須

証明書の選択肢

種類料金用途備考
Let's Encrypt (DV)無料個人 / 中小サイト90 日有効、自動更新前提
AWS Certificate Manager無料ALB / CloudFront / API GatewayEC2 直接利用は不可
Cloudflare無料Cloudflare 経由のサイト全般Cloudflare がプロキシ
Google Trust Services無料GCP Load BalancerGoogle Managed Certificate
有料 DV 証明書(Sectigo / GeoTrust 等)年 ¥1,000~企業 / 補償付き1〜2 年有効、サポート付
OV 証明書年 ¥3 万〜組織実在証明会社情報を証明書に
EV 証明書年 ¥10 万〜銀行・大手 ECかつての緑バー、現代は廃止

パターン1: Let's Encrypt + Certbot(Nginx / Apache)

Linux サーバに直接 Web サーバを立てている場合の定番。

Ubuntu + Nginx の例

# Certbot インストール
sudo apt update
sudo apt install -y certbot python3-certbot-nginx

# 証明書取得 + Nginx 設定自動反映
sudo certbot --nginx -d example.com -d www.example.com

# 対話形式で:
#   - メールアドレス入力
#   - 利用規約同意
#   - HTTP → HTTPS リダイレクト (推奨: 2)

# 自動更新の動作確認(dry-run)
sudo certbot renew --dry-run

# 自動更新は systemd timer / cron で既に設定されている
sudo systemctl status certbot.timer

Apache の例

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d example.com

# 確認
curl -I https://example.com
# HTTP/2 200
# strict-transport-security: max-age=15552000

パターン2: AWS ACM + ALB / CloudFront

AWS で運用している場合、ACM 発行証明書を ALB(Application Load Balancer)や CloudFront にアタッチ。

# AWS CLI でリクエスト
aws acm request-certificate \
    --domain-name example.com \
    --subject-alternative-names www.example.com \
    --validation-method DNS \
    --region us-east-1
# ※ CloudFront 用は必ず us-east-1(バージニア北部)

# DNS 検証用 CNAME を Route 53 に追加
# → ACM コンソールから「Route 53 で作成」ボタン一発
# → 数分で「発行済み」に

ALB / CloudFront の HTTPS Listener にこの証明書を設定 → 自動更新(人手不要)。ACM は EC2 に直接アタッチできない点に注意。EC2 で直接 SSL 終端するなら Let's Encrypt か有料証明書。

パターン3: Cloudflare をプロキシ

  1. Cloudflare に無料アカウント作成
  2. ドメインを追加(DNS 移管)
  3. 各 DNS レコードをオレンジ雲(プロキシ ON)
  4. SSL/TLS 設定で「Full (strict)」を選択
  5. 「Edge Certificates」で Cloudflare 発行証明書が自動有効化

これだけで https://example.com が即利用可能。オリジンサーバ側も自己署名証明書 or Cloudflare Origin CA を入れて HTTPS 化するのが推奨(Full strict)。

Mixed Content の解消

HTTPS ページ内で http:// の画像 / CSS / JS を読み込むと、ブラウザがブロックします:













一括変換: Content-Security-Policy

# レスポンスヘッダで http → https に自動アップグレード
Content-Security-Policy: upgrade-insecure-requests

# Nginx
add_header Content-Security-Policy "upgrade-insecure-requests";

# Apache
Header set Content-Security-Policy "upgrade-insecure-requests"

HSTS (HTTP Strict Transport Security)

このサイトには今後 HTTPS だけで来てください」とブラウザに通知するヘッダ。一度設定すると、URL に http:// と打っても自動 HTTPS 化。

# Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

# パラメータ
# max-age=31536000        ← 1 年間 HTTPS 強制
# includeSubDomains       ← サブドメインにも適用
# preload                 ← Chrome 等の HSTS Preload List に登録申請可

注意: preload 設定後はHTTPS 化を取り消せなくなる(最大 1 年)。テストで max-age=300 等から始めて段階的に伸ばす。

TLS バージョンと Cipher Suite

古い TLS 1.0 / 1.1 は2020 年に主要ブラウザで廃止。現代は TLS 1.2 + TLS 1.3 のみ有効化:

# Nginx の推奨設定(Mozilla Modern + 互換性)
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;

    # Cipher Suite(Mozilla Intermediate 推奨)
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # セッション再利用
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # HSTS
    add_header Strict-Transport-Security "max-age=63072000" always;
}

設定生成は Mozilla SSL Configuration Generator が便利。

動作確認・診断ツール

  • SSL Labs Server Test — A+ を目標に
  • Security Headers — HSTS / CSP 等のヘッダ点検
  • Lighthouse(Chrome DevTools)— HTTPS / Mixed Content 警告
  • curl -I https://example.com — ヘッダ確認
  • openssl s_client -connect example.com:443 -servername example.com — 証明書詳細

HTTP から HTTPS への 301 リダイレクト

# Nginx
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}
# Apache .htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

自動更新(Let's Encrypt)

# Certbot は systemd timer で自動更新が既定有効
sudo systemctl list-timers | grep certbot
# certbot.timer  Mon 2026-06-23 03:00:00 UTC

# cron に手動登録する場合
sudo crontab -e
# 毎日 3:30 に更新試行(期限 30 日切ったら更新)
30 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

# 動作確認
sudo certbot renew --dry-run

SEO 効果

  • Google 検索順位の軽いプラス要因(2014 から公式)
  • 同点同士の場合 HTTPS 側が優位
  • Search Console は HTTP と HTTPS を別サイト扱い → HTTPS 版を登録
  • サイトマップ URL も HTTPS に更新
  • 外部リンクの参照元情報(Referrer)が HTTP→HTTPS で送信されない問題 → Referrer-Policy: strict-origin-when-cross-origin

FAQ

Q: Let's Encrypt の信頼性は?
A: 主要ブラウザ・OS 全てで信頼されています。証明書の暗号化強度自体は有料証明書と同じ。違いは保証金・サポート・組織認証のみ。

Q: ワイルドカード証明書は無料で取れる?
A: Let's Encrypt で取得可能(certbot --manual --preferred-challenges dns -d *.example.com)。DNS 認証必須。

Q: 共有レンタルサーバで SSL 化したい
A: さくら / エックスサーバー / ロリポップ等は無料 SSL(Let's Encrypt ベース)を管理画面から 1 クリックで有効化できます。

Q: 証明書が期限切れになった
A: ブラウザに「危険サイト」警告が出ます。即更新(sudo certbot renew --force-renewal)。再発予防に監視(Datadog / UptimeRobot で証明書期限監視)を入れる。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. タイトルにキーワードを盛り込む
  2. SSL化
  3. scriptタグの記載場所
  4. サイトの引越し
  5. サイトマップとRSS/Atom
  6. CSSの遅延読み込み処理
  7. PageSpeed Insights
  8. Google Search Console
  9. Bing Webmaster Tools

最近更新/作成されたページ