CloudflareをCDN/プロキシとして使用する場合、訪問者はCloudflareのエッジサーバーに接続します。しかし、Cloudflareとオリジンサーバー間の接続はどうでしょうか?オリジンに証明書がなければ、その接続は暗号化されない可能性があり、HTTPSの意味がなくなってしまいます。
Cloudflare SSLモードの解説
| モード | 訪問者 → Cloudflare | Cloudflare → オリジン | セキュリティ |
|---|---|---|---|
| Off | HTTP | HTTP | ❌ 暗号化なし |
| Flexible | HTTPS ✅ | HTTP ❌ | ⚠️ 偽のセキュリティ感 |
| Full | HTTPS ✅ | HTTPS(未検証) | ⚠️ 暗号化されるが証明書の検証なし |
| Full (Strict) | HTTPS ✅ | HTTPS(検証済み)✅ | ✅ 推奨 |
「Flexible」は危険です。 訪問者にはパドロックが表示されますが、Cloudflare→オリジン間の接続は平文のHTTPです。そのネットワーク経路上の誰でもトラフィックを読み取れます。常に**Full (Strict)**を使用してください。
Let’s Encrypt証明書によるFull (Strict)の設定
最良のアプローチ:オリジンに実際の公的に信頼された証明書をインストールし、Full (Strict)を有効にします。
ステップ1: Let’s Encrypt証明書を取得する
GetHTTPSを使用して、ドメインの無料証明書を取得します。HTTP-01チャレンジがオリジンに到達するために、一時的にCloudflareプロキシを無効にする(DNS設定でオレンジ色のクラウドをグレーに変更する)必要があります。または、DNS-01を使用すればプロキシの変更は不要です。
DNS-01方式(プロキシ変更不要):
- GetHTTPSでDNS-01チャレンジを選択します
- Cloudflare DNSに
_acme-challengeTXTレコードを追加します - 検証して証明書をダウンロードします
HTTP-01方式:
- Cloudflare DNSで、ドメインのオレンジ色のクラウドをクリック → グレーのクラウド(DNSのみ)に変更します
- GetHTTPSでHTTP-01チャレンジを完了します
- 証明書を取得後、オレンジ色のクラウド(プロキシ)を再度有効にします
ステップ2: オリジンサーバーにインストールする
通常通り、NginxまたはApacheに証明書をインストールします。
ステップ3: CloudflareでFull (Strict)を有効にする
- Cloudflareダッシュボード → ドメインに移動します
- SSL/TLS → Overview
- **Full (Strict)**を選択します
これにより、Cloudflareは接続前にオリジンに有効で信頼された証明書があることを検証するようになります。
代替案:Cloudflare Origin CA証明書
Cloudflareは独自のOrigin CA証明書を提供しています。これはCloudflareのみが信頼する無料の証明書であり、ブラウザが直接信頼するものではありません。
取得方法
- Cloudflareダッシュボード → SSL/TLS → Origin Server
- Create Certificateをクリックします
- 鍵の種類(RSAまたはECDSA)と有効期間(最大15年)を選択します
- 証明書と秘密鍵をダウンロードします
- オリジンサーバーにインストールします
Let’s Encryptとの比較
| Cloudflare Origin CA | Let’s Encrypt(GetHTTPS経由) | |
|---|---|---|
| 信頼される範囲 | Cloudflareのみ | すべてのブラウザ(公的に信頼) |
| 有効期間 | 最大15年 | 90日 |
| 自動更新の必要性 | なし(長い有効期間) | あり(60〜90日ごと) |
| Cloudflareなしで動作 | ❌ | ✅ |
| ブラウザから直接アクセス | ❌(エラーが表示される) | ✅ |
| コスト | 無料 | 無料 |
Cloudflare Origin CAを使用する場合: オリジンが常にCloudflareの背後にあり、更新管理をゼロにしたい場合。
Let’s Encryptを使用する場合: Cloudflareをバイパスする可能性がある場合(メンテナンス、移行)、オリジンに直接アクセスする必要がある場合、またはどこでも動作する証明書が必要な場合。
Full (Strict)が動作していることを確認する
設定後、接続が完全に暗号化されていることをテストします:
- Cloudflareダッシュボード → SSL/TLS → Overviewに「Full (Strict)」と表示されていること
- サイトにアクセス → 訪問者にはCloudflareの証明書が表示されたパドロックが見えること
- オリジンを直接確認する(Cloudflareをバイパス):
Let’s Encrypt(またはOrigin CA)証明書による有効なHTTPSレスポンスが返されるはずです。curl -I --resolve yourdomain.com:443:YOUR_ORIGIN_IP https://yourdomain.com
よくある質問
なぜFlexibleモードを使うべきではないのですか?
Flexibleモードは訪問者→Cloudflare間の接続を暗号化しますが、Cloudflareからオリジンへのトラフィックは平文のHTTPで送信されます。これは以下を意味します:
- ISP、ホスティングプロバイダー、またはCloudflareのエッジとサーバー間のネットワーク上の誰でもすべてのトラフィックを読み取れます
- 訪問者はパドロックを見てセキュアだと思いますが、バックエンド接続は保護されていません
- これはログインページ、決済フォーム、またはあらゆる機密データにとって特に危険です
オリジン証明書はドメインと完全に一致する必要がありますか?
Full (Strict)モードの場合、はい。オリジン証明書はCloudflareが接続するドメインに対して有効でなければなりません。example.comのLet’s Encrypt証明書は動作します。自己署名証明書や別のドメインの証明書は動作しません。
ワイルドカードオリジン証明書を使用できますか?
はい。オリジンの*.example.comのワイルドカード証明書は、Cloudflareを通じてプロキシされるすべてのサブドメインでFull (Strict)で動作します。
オリジン証明書の有効期限が切れるとどうなりますか?
CloudflareのFull (Strict)モードは証明書の有効性を確認します。オリジン証明書の有効期限が切れると、Cloudflareはセキュアな接続を確立できず、サイトに526エラー(Invalid SSL Certificate)が表示されます。これを防ぐために、有効期限の監視を設定してください。