Payment Card Industry Data Security Standard(PCI DSS)は、決済カードデータを保存、処理、または送信するすべての組織に適用されます。サイトまたはアプリケーションが Cloudflare の背後で動く場合、いくつかの PCI DSS 要件は Cloudflare のトラフィック処理に適用されます。一部はゾーンでの明示的な設定が必要です。
このガイドでは、PCI DSS 準拠に必要な Cloudflare の設定手順、Cloudflare と PCI Approved Scanning Vendor(ASV)スキャンの関わり、既知のスキャナー誤検知を説明します。
Cloudflare は Level 1 PCI DSS Service Provider として認証されています。これが最高の認証レベルです。Cloudflare の現行の Attestation of Compliance(AOC)は Cloudflare Trust Hub ↗ から取得できます。
| 領域 | Cloudflare | お客様 |
|---|---|---|
| TLS プロトコル対応 | すべてのプランで TLS 1.2 と 1.3 に対応 | ゾーンの最低 TLS バージョンを 1.2 に設定する |
| 暗号スイート | PCI DSS 承認済みの暗号スイートを提供 | ゾーンで PCI DSS 暗号スイートプロファイルを有効にする。暗号スイートの設定には Advanced Certificate Manager サブスクリプションが必要です。 |
| 脆弱性パッチ | Cloudflare インフラストラクチャをパッチする(ROBOT、Sweet32 など) | オリジンサーバーとサードパーティソフトウェアのパッチを維持する |
| クライアント側スクリプト | Client-Side Security Advanced が決済ページのスクリプトを棚卸しして監視する | Client-Side Security を有効にして設定する |
ステップ 1 と 2 は PCI DSS 準拠に必要です。ステップ 3 はより強い構成向けの Cloudflare の推奨ですが、TLS 1.2 を最低とする PCI DSS v4.0 では必須ではありません。PCI スキャンは各層を独立して確認します。ステップ 1 と 2 だけ完了すれば、規格を満たすには十分です。
PCI DSS 要件 4.2.1 は、転送中のカード会員データに強い暗号を義務付け、最低受け入れバージョンを TLS 1.2 としています。TLS 1.0 と TLS 1.1 は、PCI DSS では強い暗号と見なされません。
-
Cloudflare ダッシュボードで、SSL/TLS > Edge Certificates を開きます。
Edge Certificates を開く ↗ -
Minimum TLS Version で TLS 1.2 以上を選びます。
API と Terraform のオプションは Minimum TLS Version を参照してください。
PCI DSS は弱い、または非推奨の暗号アルゴリズムを禁止します。ゾーンを PCI DSS 承認済みの暗号リストに制限する必要があります。
暗号スイートをカスタマイズする(ダッシュボード) の手順に従い、コンプライアンス規格 に記載された PCI DSS プロファイルから暗号スイートを選びます。または API を使います。
Required API token permissions
At least one of the following token permissions is required:Zone Settings Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/settings/ciphers" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"value": [
"ECDHE-ECDSA-AES128-GCM-SHA256",
"ECDHE-RSA-AES128-GCM-SHA256",
"ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-GCM-SHA384",
"ECDHE-ECDSA-CHACHA20-POLY1305",
"ECDHE-RSA-CHACHA20-POLY1305"
]
}'TLS 1.3 は TLS 1.2 より強いセキュリティ保証を提供し、いくつかのレガシーハンドシェイクパターンをなくします。より強く将来に備えた構成として、TLS 1.2 と併用することを推奨します。PCI DSS 準拠では必須ではなく、最低は TLS 1.2 です。
-
Cloudflare ダッシュボードで、SSL/TLS > Edge Certificates を開きます。
Edge Certificates を開く ↗ -
TLS 1.3 を有効にします。
API と Terraform のオプションは TLS 1.3 を参照してください。
すべての設定を適用したあと、非準拠の接続が拒否されることを確認します。
オンライン TLS スキャナーは、構成の外部からの見え方を示します。PCI ASV スキャンが見る視点と同じです。よく使われる選択肢は次の 2 つです。
- SSL Labs Server Test ↗ — ドメインを入力してレポートを確認します。TLS 1.0 と TLS 1.1 が拒否され、TLS 1.2 以上が対応し、弱いまたは非推奨の暗号スイートが交渉されていないことを確認します。
- SSL Shopper SSL Checker ↗ — 外部の視点から証明書チェーンと TLS 構成を検証します。
openssl s_client を使うと、コマンドラインから特定の TLS バージョンをテストできます。TLS 1.0 または TLS 1.1 を使う接続は失敗する必要があります。
# Should fail — TLS 1.0 rejected
openssl s_client -connect example.com:443 -tls1
# Should fail — TLS 1.1 rejected
openssl s_client -connect example.com:443 -tls1_1拒否された接続は次のようなエラーを返します。
4087F5C1E27F0000:error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol versionTLS 1.2 で交渉される暗号スイートを確認するには:
openssl s_client -connect example.com:443 -tls1_2 2>/dev/null | grep -E "Protocol|Cipher"出力は PCI DSS 承認済みリストの暗号を示す必要があります。例: ECDHE-RSA-AES128-GCM-SHA256。
TLS 1.0 と TLS 1.1 が拒否されることを確認するには:
# Should fail — TLS 1.0 rejected
curl https://example.com --tls-max 1.0 -svo /dev/null
# Should fail — TLS 1.1 rejected
curl https://example.com --tls-max 1.1 -svo /dev/null拒否された接続は次のようなエラーを返します。
* error:1400442E:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alertEdge Certificates ページで View current ciphers を選び、ゾーンに設定されている暗号スイートを確認します。
*.pages.dev ホスト名では、最低 TLS バージョンや暗号スイートを設定できません。これらの設定は、Cloudflare ダッシュボードで制御するゾーンにのみ適用されます。
Pages プロジェクトでホストする決済ページでは、制御するゾーンに付けた カスタムドメイン を使います。ゾーンレベルの TLS と暗号スイート設定は、そのカスタムドメイン経由で配信されるトラフィックに適用されます。
PCI DSS v4.0 は、決済ページで消費者のブラウザーで動くスクリプト向けに、2 つの要件を導入しました。
| 要件 | 説明 | Cloudflare 機能 |
|---|---|---|
| 6.4.3 | 決済ページ上のすべてのスクリプトの棚卸しを維持し、認可と完全性チェックを行う | Page Shield |
| 11.6.1 | HTTP セキュリティヘッダーと決済ページコンテンツの不正な変更を検出して警告する | Page Shield |
設定の指針は クライアント側セキュリティと PCI DSS 準拠 を参照してください。
PCI DSS は、Approved Scanning Vendor(ASV)による四半期ごとの脆弱性スキャンを要求します。ドメインが Cloudflare 経由でプロキシされている場合、ASV スキャナーはオリジンサーバーではなく Cloudflare のエッジネットワークとやり取りします。よく起きる動きがいくつかあります。
一部の ASV ツールは、Cloudflare プロキシ済み IP アドレスに対して TCP Source Port Pass Firewall の検出結果を報告します。これは誤検知です。Cloudflare の anycast ネットワークが TCP 接続を処理する方法が原因です。この動きは Cloudflare インフラストラクチャの性質であり、お客様環境の脆弱性ではありません。
QSA またはスキャンツールがこの検出結果にフラグを付けた場合は、次を提供します。
- Cloudflare の現行の Attestation of Compliance(AOC) ↗
- ドメインが PCI DSS Level 1 Service Provider である Cloudflare 経由でプロキシされていることの文書
QSA は、Cloudflare の責任分担境界に基づき、これを補償統制または文書化された例外として扱えます。
ASV スキャナーは、アプリケーションをテストするために、SQL インジェクションプローブ、XSS ペイロード、脆弱性フィンガープリントなどの攻撃パターントラフィックを送ります。Cloudflare の WAF はこれらのプローブの多くをブロックします。これは正しい WAF の動きですが、スキャナーが評価を完了できないことがあります。
WAF を無効にせずにスキャンを許可するには:
- ASV ベンダーが使うソース IP 範囲を取得します。
- スキャン保守ウィンドウにスコープを限定し、それらの IP 範囲に対してマネージドルールセットの照合をスキップする WAF カスタムルール を作成します。
- スキャン完了後すぐにルールを削除または無効にします。
Cloudflare は 定義済みの HTTP および HTTPS ポート をプロキシします。その一覧外のポートでは、Cloudflare の anycast ネットワークにより、プロキシされていなくても TCP 層ではポートが開いているように見えることがあります。TCP 接続はエッジで受け入れられますが、HTTP/HTTPS リクエストはアプリケーション層でブロックされ、オリジンには到達しません。
ASV スキャンがプロキシされていないポートを対象にする場合、それらのポートの検出結果はオリジンではなく Cloudflare エッジの動きを反映します。アプリケーションが実際に提供するポートをスキャン対象にし、想定どおりの動きを文書化するために ネットワークポートのリファレンス を QSA に提供します。
Cloudflare は、プロキシ済みのすべてのゾーンにこれらの緩和をデフォルトで適用します。設定は不要です。
Cloudflare は次に対応していません。
- TLS のヘッダー圧縮
- SPDY 3.1 のヘッダー圧縮
- RC4
- SSL 3.0
- クライアントとの再交渉
- DHE 暗号スイート
- 輸出グレードの暗号
Cloudflare が緩和するもの:
- CRIME
- BREACH
- POODLE
- RC4 の暗号上の弱点
- SSL 再交渉攻撃
- プロトコルダウングレード攻撃
- FREAK
- LogJam
- Sweet32 — TLS 1.1 と 1.2 では 3DES が無効です。TLS 1.0 では、攻撃成功に必要な 32 GB のしきい値より前にセッション鍵をローテーションします
すべての Cloudflare サーバーは、Heartbleed、Lucky Thirteen、CCS injection 脆弱性に対してパッチ済みです。
Cloudflare プロキシ済みドメインに対して Return of Bleichenbacher's Oracle Threat(ROBOT) を報告するセキュリティスキャンは誤検知です。Cloudflare は RSA PKCS#1 v1.5 パディングをリアルタイムで検証し、パディングが正しくない場合はランダムなセッション鍵に置き換えます。悪用可能なオラクルをなくします。
スキャナーが Sweet32 にフラグを付けた場合は、ゾーンで TLS 1.0 が無効であることを確認します。手順は 最低 TLS バージョンを 1.2 に設定する を参照してください。TLS 1.0 が無効なら、Sweet32 が適用される 3DES 暗号スイートは使われず、この検出結果は環境に適用されません。
Cloudflare は、レート制限のために一部のゾーンで _cfuvid Cookie を設定します。HTTP でスキャンすると、一部のスキャナーはこの Cookie に Secure 属性がないと報告することがあります。ASV がこの検出結果を上げた場合は、ASV が HTTPS エンドポイントをスキャンしていること、ゾーンが HTTP トラフィックを HTTPS にリダイレクトしていることを確認します。設定手順は Always Use HTTPS を参照してください。