Cloudflare 上の HTTPS には、2 つの独立した接続があります。訪問者から Cloudflare、および Cloudflare からオリジンサーバーです。エンドツーエンドのセキュリティには、両方を暗号化する必要があります。このガイドは次の 5 段階で進めます。
- SSL/TLS 暗号化モードを設定します。
- すべての HTTP リクエストを HTTPS へリダイレクトします。
- 最小 TLS バージョンと HSTS で HTTPS 構成を強化します。
- ページ上のサードパーティスクリプトを監視します。
- 設定を確認します。
中核の手順は、Free、Pro、Business プランで利用できます。
SSL/TLS 暗号化モードは、Cloudflare がオリジンサーバーへどう接続するかを制御します。エンドツーエンド暗号化には Full (strict) を使います。両方の接続を暗号化し、オリジン証明書を検証します。利用できるすべてのモードの詳細な比較は、暗号化モード を参照してください。
-
Cloudflare ダッシュボードで、SSL/TLS Overview ページを開きます。
Overview を開く ↗ -
ページに表示されている現在の暗号化モードを確認します。
- モードがすでに Full (strict) の場合は、すべての HTTP リクエストを HTTPS へリダイレクトする に進みます。
- モードが Full (strict) でない場合は、必要に応じてオリジン証明書をインストールし、モードを変更します。
オリジンサーバーに有効な SSL 証明書がない場合は、無料の Cloudflare Origin CA 証明書をインストールします。Origin CA 証明書の有効期間は最大 15 年で、Cloudflare から信頼されます。インストール後に暗号化モードを Full (strict) に設定できます。
オリジンに、一般に信頼されている認証局の有効な証明書がすでにある場合は、暗号化モードを Full (strict) に設定する に進みます。
-
Origin Server ページを開きます。
Origin Server を開く ↗ -
Origin Certificates タブで、Create Certificate を選択します。
-
次のいずれかを選びます。
- Generate private key and CSR with Cloudflare: 秘密鍵の種類は RSA または ECC です。
- Use my private key and CSR: テキスト欄に CSR(Certificate Signing Request)を貼り付けます。
-
SSL 暗号化で保護するホスト名(ワイルドカードを含む)を列挙します。ゾーンの apex と第 1 レベルのワイルドカードホスト名は、デフォルトで含まれます。
-
Certificate Validity の期間を選びます。
-
Create を選択します。
-
Key Format を選びます。
- OpenSSL を使うサーバー(Apache や NGINX など)は、一般に PEM ファイル(Base64 エンコードの ASCII)を想定しますが、バイナリの DER ファイルでも動作します。
- Windows と Apache Tomcat を使うサーバーは、PKCS#7(
.p7bファイル)が必要です。
-
署名済みの Origin Certificate と Private Key を、それぞれ別のファイルにコピーします。セキュリティ上の理由で、この画面を閉じると Private Key は再表示できません。
-
OK を選択します。
-
Origin CA 証明書をオリジンの Web サーバーにアップロードします。
-
Web サーバーの設定を更新し、証明書を使うようにします。サーバー別のインストール手順は、Origin CA 証明書 を参照してください。
-
(一部のサーバーで必須)Cloudflare CA ルート証明書 をオリジンサーバーにアップロードします。
-
オリジンの Web サーバーで SSL とポート
443を有効にします。
オリジンサーバーに有効な証明書をインストールしたあと、次の手順で暗号化モードを Full (strict) に設定します。
ダッシュボードで暗号化モードを変更するには:
-
Cloudflare ダッシュボードで SSL/TLS Overview ページを開きます。
Overview を開く ↗ -
暗号化モードを選びます。
API で暗号化モードを変更するには、URI パスの設定名に ssl を指定し、value パラメーターに希望する設定(off、flexible、full、strict、または origin_pull)を入れて PATCH リクエストを送信します。
エッジ証明書が有効でも、訪問者は暗号化されていない HTTP 接続でリソースにアクセスできます。これを直すには、次の 2 つの設定を併用します。
- Always Use HTTPS は、HTTP リクエストを HTTPS へリダイレクトします
- Automatic HTTPS Rewrites は、ページ HTML 内の混在コンテンツ参照を修正します
Always Use HTTPS は、すべての HTTP リクエストを、オリジンに届く前に HTTPS へリダイレクトします。
-
Cloudflare ダッシュボードで、SSL/TLS Overview ページを開きます。
Overview を開く ↗ -
SSL/TLS 暗号化モード が Off になっていないことを確認します。暗号化モードが Off のとき、Always Use HTTPS オプションはダッシュボードに表示されません。
-
Edge Certificates ↗ ページを開きます。
-
Always Use HTTPS をオンにします。
-
SSL/TLS 暗号化モード が Off になっていないことを確認します。
-
URI パスの設定名を
always_use_https、valueパラメーターを"on"にしてPATCHリクエストを送ります。
Automatic HTTPS Rewrites は、ページ HTML 内の HTTP リソース URL を HTTPS に書き換えることで、混在コンテンツエラーを防ぎます。CMS でホストしているコンテンツや埋め込みのサードパーティリソースなど、すべてのアセット URL を自分で制御できないサイトで役立ちます。
-
Cloudflare ダッシュボードで、Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
Automatic HTTPS Rewrites のトグルを On にします。
URI パスの設定名を automatic_https_rewrites、value パラメーターを "on" にして PATCH リクエストを送ります。
暗号化モードを設定し、HTTP トラフィックをリダイレクトしたあと、最小 TLS バージョンの設定、HTTP Strict Transport Security (HSTS) の有効化、TLS 1.3 の有効化で構成を強化します。
TLS 1.0 と 1.1 には既知の脆弱性があり、安全とは見なされません。最小 TLS バージョンを 1.2 にすると、古いプロトコルを使うクライアントからの接続をブロックします。どのバージョンを選ぶかの指針は、TLS プロトコル を参照してください。
-
Cloudflare ダッシュボードで、Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
Minimum TLS Version で TLS 1.2 を選択します。
URI パスの設定名を min_tls_version、value パラメーターを "1.2" にして PATCH リクエストを送ります。
TLS 1.3 は、TLS 1.2 より高速なハンドシェイクと高いセキュリティを提供します。
-
Cloudflare ダッシュボードで、Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
TLS 1.3 のトグルを On にします。
URI パスの設定名を tls_1_3、value パラメーターを "on" にして PATCH リクエストを送ります。0-RTT(Zero Round Trip Time Resumption)もオンにする場合は、値を "zrt" にします。
HTTP Strict Transport Security (HSTS) は、リンクやリダイレクトが HTTP へ誘導しようとしても、ブラウザーがサイトへ HTTPS のみで接続するように伝えるレスポンスヘッダーを追加します。HSTS はプロトコルダウングレード攻撃から保護します。
HSTS をオンにする前に、次の前提条件を確認します。
- ドメインで HTTPS が有効で、動作している。
- DNS レコードが Proxied になっている。
- どこでも HTTPS を HTTP へリダイレクトしていない。
-
Cloudflare ダッシュボードで、Edge Certificates ページを開きます。
Edge Certificates を開く ↗ -
HTTP Strict Transport Security (HSTS) で Enable HSTS を選択します。
-
ダイアログを読み、I understand を選択します。
-
Next を選択します。
-
HSTS の設定を構成します。
- Max Age Header: 期間を選びます(まず 6 か月から始め、安定を確認したあと 12 か月に延ばします)。
- Apply HSTS policy to subdomains (includeSubDomains): すべてのサブドメインが HTTPS に対応している場合にオンにします。オンにすると、HTTPS 非対応のサブドメインへアクセスできなくなります。
- Preload: Max Age Header を 12 か月に設定したあとでのみオンにします。プリロード対象に含めると、初回訪問時のダウングレード攻撃を防げます。プリロードをオンにしたら、hstspreload.org ↗ でドメインを申請します。
- No-Sniff Header:
X-Content-Type-Options: nosniffヘッダーを送ります。ブラウザーの MIME タイプスニッフィングを防ぐためにオンにします。
-
Save を選択します。
URI パスの設定名を security_header にし、HSTS 設定を含む value オブジェクトを指定して PATCH リクエストを送ります。
Cloudflare のデフォルト暗号スイートは、ほとんどのサイトに十分な強い暗号化を提供します。セキュリティ監査やコンプライアンス要件で特定の暗号構成が指定されていない限り、変更する必要はありません。
デフォルトの暗号スイートとカスタマイズ方法の詳細は、暗号スイート を参照してください。コンプライアンス向けの暗号構成は、API で暗号スイートをカスタマイズする を参照してください。
HTTPS は転送中のデータを暗号化しますが、ページが読み込むサードパーティスクリプトは、ブラウザーからデータを持ち出せます。Client-side security はこれらのスクリプトを監視し、想定外の追加を知らせます。
-
Cloudflare ダッシュボードで、Security の Settings ページを開きます。
Settings を開く ↗ -
(任意)Client-side abuse で絞り込みます。
-
Continuous script monitoring をオンにします。
監視をオンにしたあと、ドメイン上で検出されたスクリプトの一覧が Cloudflare によって生成されるまで、時間がかかることがあります。
-
Cloudflare ダッシュボードで、Web assets ページを開きます。
Web assets を開く ↗ -
Client-side resources タブを選択します。
-
検出されたスクリプトの一覧を確認します。認識できないドメインからの、不明または想定外のスクリプトがないか確認します。
プランによっては、スクリプトが行った接続を確認し、悪意のある活動がないか調べることもできます。設定の詳細は、Client-side security を利用する を参照してください。
前の段階を終えたら、HTTPS 構成が想定どおり動作することを確認します。
Cloudflare の Automatic SSL/TLS はオリジンサーバーを分析し、オリジンが対応する最も安全な暗号化モードを選びます。ゾーンが Automatic SSL/TLS(新規ゾーンのデフォルト)を使っている場合、Cloudflare はモードを自動で調整し、オリジン証明書が期限切れになっても、より安全性の低いモードへダウングレードしません。
ゾーンが Automatic SSL/TLS を使っているかどうかを確認するには:
-
Cloudflare ダッシュボードで、SSL/TLS Overview ページを開きます。
Overview を開く ↗ -
Automatic SSL/TLS と Custom SSL/TLS のどちらが選ばれているかを確認します。Custom が選ばれていて、Cloudflare にモードを自動管理させたい場合は、Automatic SSL/TLS を選択します。
SSL Labs Server Test ↗ を使い、Cloudflare ネットワークの外側から HTTPS 構成を確認します。ドメインを入力し、レポートを確認します。A または A+ の評価は、TLS 構成、証明書チェーン、プロトコル対応が現行のセキュリティ基準を満たしていることを示します。
サポートされている TLS バージョンをテストするには、TLS バージョンを指定して、ウェブサイトまたはアプリケーションへリクエストを送ります。
たとえば TLS 1.1 をテストするには、次の curl コマンドを使います。www.example.com を、ご自身の Cloudflare ドメインとホスト名に置き換えてください。
curl https://www.example.com -svo /dev/null --tls-max 1.1テスト中の TLS バージョンが Cloudflare によってブロックされている場合、TLS ハンドシェイクは完了せず、次のエラーが返ります。
* error:1400442E:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alert
SSL/TLS
- SSL/TLS を利用する — エッジ証明書、暗号化モード、HTTPS 強制の導入ガイド
- 暗号化モード — Off、Flexible、Full、Full (strict) 各モードの詳細
- Cloudflare Origin CA — Cloudflare が信頼する無料のオリジン証明書を作成します
- 混在コンテンツエラー — HTTPS ページで読み込まれる HTTP リソースのトラブルシューティング
- ERR_TOO_MANY_REDIRECTS — 暗号化モードの設定ミスによるリダイレクトループを解消します
Client-side security
- Client-side security を利用する — 監視の有効化、スクリプトの確認、アラートの設定、ルールの作成
- Client-side security と PCI DSS コンプライアンス — Client-side security が PCI DSS v4 要件にどう対応するか