Skip to content

Commit 9c6aefa

Browse files
committed
docs(ssl): rebase onto production
DEE-3623
1 parent 50fe55b commit 9c6aefa

1 file changed

Lines changed: 223 additions & 41 deletions

File tree

Lines changed: 223 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,256 @@
11
---
2-
pcx_content_type: reference
3-
description: PCI compliance status and TLS vulnerability mitigations.
2+
pcx_content_type: how-to
3+
description: Configure your Cloudflare zone for PCI DSS compliance — set minimum TLS version, configure approved cipher suites, and understand how Cloudflare interacts with PCI ASV scans.
44
products:
55
- ssl
66
source: https://support.cloudflare.com/hc/en-us/articles/205043158-PCI-compliance-and-Cloudflare-SSL-TLS
7-
title: PCI compliance and vulnerabilities mitigation
8-
7+
title: PCI DSS compliance
98
tags:
109
- TLS
10+
- Compliance
1111
---
1212

13-
import { DashButton } from "~/components";
13+
import { DashButton, APIRequest } from "~/components";
14+
15+
The Payment Card Industry Data Security Standard (PCI DSS) applies to any organization that stores, processes, or transmits payment card data. When your site or application runs behind Cloudflare, several PCI DSS requirements apply to how Cloudflare handles your traffic — and some require explicit configuration on your zone.
16+
17+
This guide walks through the Cloudflare configuration steps required for PCI DSS compliance, explains how Cloudflare interacts with PCI Approved Scanning Vendor (ASV) scans, and lists known scanner false positives.
18+
19+
## Cloudflare's PCI DSS certification
20+
21+
Cloudflare is certified as a **Level 1 PCI DSS Service Provider** — the highest certification level. You can obtain Cloudflare's current Attestation of Compliance (AOC) from the [Cloudflare Trust Hub](https://www.cloudflare.com/trust-hub/compliance-resources/pci-dss/).
1422

15-
Both [TLS 1.0 and TLS 1.1](/ssl/reference/protocols/) are insufficient for protecting information due to known vulnerabilities. Specifically for Cloudflare customers, the primary impact of PCI is that TLS 1.0 and TLS 1.1 are insufficient to secure payment card related traffic.
23+
:::note
24+
Cloudflare's AOC covers Cloudflare's own infrastructure. It does not automatically extend to your zone or application. You are responsible for configuring Cloudflare correctly and securing your own systems.
25+
:::
1626

17-
PCI standards recommend using TLS 1.2 or higher. Refer to [Compliance standards](/ssl/edge-certificates/additional-options/cipher-suites/compliance-status/) for a list of recommended cipher suites.
27+
## Shared responsibility
1828

19-
Cloudflare also [implements mitigations against known vulnerabilities](#known-vulnerabilities-mitigations) for TLS 1.0 and 1.1.
29+
| Area | Cloudflare | You |
30+
| --- | --- | --- |
31+
| TLS protocol support | Supports TLS 1.2 and 1.3 on all plans | Set minimum TLS version to 1.2 on your zone |
32+
| Cipher suites | Offers PCI DSS-approved cipher suites | Enable the PCI DSS cipher suite profile on your zone. Configuring cipher suites requires an [Advanced Certificate Manager](/ssl/edge-certificates/advanced-certificate-manager/) subscription. |
33+
| Vulnerability patching | Patches Cloudflare infrastructure (ROBOT, Sweet32, and others) | Keep your origin server and any third-party software patched |
34+
| Client-side scripts | Client-Side Security Advanced inventories and monitors payment page scripts | Enable and configure Client-Side Security |
2035

21-
## Set Minimum TLS Version to 1.2
36+
## Configure TLS settings
2237

23-
To configure your Cloudflare domain to only allow connections using TLS 1.2 or newer protocols:
38+
Steps 1 and 2 are required for PCI DSS compliance. Step 3 is Cloudflare's recommendation for a stronger configuration but is not mandated by PCI DSS v4.0, which sets TLS 1.2 as the minimum. A PCI scan checks each layer independently — completing only Steps 1 and 2 is sufficient to meet the standard.
2439

25-
1. In the Cloudflare dashboard, go to the **Edge Certificates** page.
40+
### Step 1: Set minimum TLS version to 1.2
41+
42+
PCI DSS requirement 4.2.1 mandates strong cryptography for cardholder data in transit, with TLS 1.2 as the minimum acceptable version. TLS 1.0 and TLS 1.1 are not considered strong cryptography under PCI DSS.
43+
44+
1. In the Cloudflare dashboard, go to **SSL/TLS** > **Edge Certificates**.
2645

2746
<DashButton url="/?to=/:account/:zone/ssl-tls/edge-certificates" />
2847

2948
2. For **Minimum TLS Version**, select **TLS 1.2** or higher.
3049

31-
Refer to [Minimum TLS version](/ssl/edge-certificates/additional-options/minimum-tls/) for more information about this setting and other setup options.
50+
Refer to [Minimum TLS Version](/ssl/edge-certificates/additional-options/minimum-tls/) for API and Terraform options.
51+
52+
### Step 2: Configure PCI DSS cipher suites
53+
54+
PCI DSS prohibits weak and deprecated cipher algorithms. You must restrict your zone to the PCI DSS-approved cipher list.
55+
56+
:::note[Prerequisite]
57+
Cipher suite customization requires an [Advanced Certificate Manager](/ssl/edge-certificates/advanced-certificate-manager/) subscription.
58+
:::
59+
60+
:::note
61+
- You cannot configure specific TLS 1.3 cipher suites. When you [enable TLS 1.3](#step-3-enable-tls-13-recommended), Cloudflare automatically uses all supported TLS 1.3 cipher suites, all of which meet PCI DSS requirements. The cipher list in this step applies to TLS 1.2 connections only.
62+
- Updating cipher suites triggers certificate redeployment, which may take a few minutes. Wait before running a verification scan.
63+
:::
64+
65+
Follow the steps in [Customize cipher suites (dashboard)](/ssl/edge-certificates/additional-options/cipher-suites/customize-cipher-suites/dashboard/) and select the cipher suites from the PCI DSS profile listed in [Compliance standards](/ssl/edge-certificates/additional-options/cipher-suites/compliance-status/#pci-dss). Alternatively, use the API:
66+
67+
<APIRequest
68+
path="/zones/{zone_id}/settings/{setting_id}"
69+
method="PATCH"
70+
json={{
71+
value: [
72+
"ECDHE-ECDSA-AES128-GCM-SHA256",
73+
"ECDHE-RSA-AES128-GCM-SHA256",
74+
"ECDHE-ECDSA-AES256-GCM-SHA384",
75+
"ECDHE-RSA-AES256-GCM-SHA384",
76+
"ECDHE-ECDSA-CHACHA20-POLY1305",
77+
"ECDHE-RSA-CHACHA20-POLY1305",
78+
],
79+
}}
80+
parameters={{
81+
setting_id: "ciphers",
82+
}}
83+
/>
84+
85+
### Step 3: Enable TLS 1.3 (recommended)
86+
87+
TLS 1.3 provides stronger security guarantees than TLS 1.2, eliminates several legacy handshake patterns, and is recommended alongside TLS 1.2 for a stronger, future-proof configuration. It is not required for PCI DSS compliance, which mandates TLS 1.2 as the minimum.
88+
89+
1. In the Cloudflare dashboard, go to **SSL/TLS** > **Edge Certificates**.
90+
91+
<DashButton url="/?to=/:account/:zone/ssl-tls/edge-certificates" />
92+
93+
2. Enable **TLS 1.3**.
94+
95+
Refer to [TLS 1.3](/ssl/edge-certificates/additional-options/tls-13/) for API and Terraform options.
96+
97+
## Verify your configuration
98+
99+
After applying all settings, confirm that non-compliant connections are rejected.
100+
101+
### Use an online TLS scanner
102+
103+
Online TLS scanners give you an external view of your configuration — the same perspective a PCI ASV scan sees. Two commonly used options are:
104+
105+
- [SSL Labs Server Test](https://www.ssllabs.com/ssltest/) — enter your domain and review the report. Check that TLS 1.0 and TLS 1.1 are rejected, TLS 1.2 or higher is supported, and no weak or deprecated cipher suites are negotiated.
106+
- [SSL Shopper SSL Checker](https://www.sslshopper.com/ssl-checker.html) — validates your certificate chain and TLS configuration from an external vantage point.
107+
108+
:::note
109+
Cloudflare does not endorse any specific third-party tool. Use any scanner that fits your workflow — what matters is verifying from outside the Cloudflare dashboard.
110+
:::
111+
112+
### Use openssl
113+
114+
`openssl s_client` lets you test specific TLS versions from the command line. Connections using TLS 1.0 or TLS 1.1 should fail:
115+
116+
```sh
117+
# Should fail — TLS 1.0 rejected
118+
openssl s_client -connect example.com:443 -tls1
119+
120+
# Should fail — TLS 1.1 rejected
121+
openssl s_client -connect example.com:443 -tls1_1
122+
```
123+
124+
A rejected connection returns an error such as:
125+
126+
```sh
127+
4087F5C1E27F0000:error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
128+
```
129+
130+
To confirm which cipher suite is negotiated over TLS 1.2:
131+
132+
```sh
133+
openssl s_client -connect example.com:443 -tls1_2 2>/dev/null | grep -E "Protocol|Cipher"
134+
```
32135

33-
## Known vulnerabilities mitigations
136+
The output should show a cipher from the PCI DSS-approved list — for example `ECDHE-RSA-AES128-GCM-SHA256`.
34137

35-
There are several mitigations Cloudflare performs against known vulnerabilities for TLS versions prior to 1.2. For example, Cloudflare does not support:
138+
### Use curl
36139

37-
* Header compression in TLS
38-
* Header compression in SPDY 3.1
39-
* RC4
40-
* SSL 3.0
41-
* Renegotiation with clients
42-
* DHE ciphersuites
43-
* Export-grade ciphers
140+
To confirm TLS 1.0 and TLS 1.1 are rejected:
44141

45-
Cloudflare mitigations protect against several attacks:
142+
```sh
143+
# Should fail — TLS 1.0 rejected
144+
curl https://example.com --tls-max 1.0 -svo /dev/null
46145

47-
* CRIME
48-
* BREACH
49-
* POODLE
50-
* RC4 Cryptographic Weaknesses
51-
* SSL Renegotiation Attack
52-
* Protocol Downgrade Attacks
53-
* FREAK
54-
* LogJam
55-
* 3DES is disabled entirely for TLS 1.1 and 1.2 and Cloudflare implements mitigations for TLS 1.0
146+
# Should fail — TLS 1.1 rejected
147+
curl https://example.com --tls-max 1.1 -svo /dev/null
148+
```
56149

57-
Cloudflare provides additional mitigations for:
150+
A rejected connection returns an error such as:
58151

59-
* Heartbleed
60-
* Lucky Thirteen
61-
* CCS injection vulnerability
152+
```sh
153+
* error:1400442E:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alert
154+
```
62155

63-
Cloudflare has patched all servers against these vulnerabilities. Also, the [Cloudflare Web Application Firewall](/waf/) has managed rules that mitigate several of these vulnerabilities including Heartbleed and ShellShock.
156+
### Check from the dashboard
64157

65-
### Return of Bleichenbacher's Oracle Threat (ROBOT)
158+
On the **Edge Certificates** page, select **View current ciphers** to see the cipher suites configured on your zone.
66159

67-
Security scans that note the presence of ROBOT while on Cloudflare are a false positive. Cloudflare checks padding in real time and swaps to a random session key if the padding is incorrect.
160+
:::note
161+
The dashboard shows your configured cipher suites. The ciphers actually negotiated in a TLS handshake depend on the connecting client and certificate algorithm (RSA vs. ECDSA). Use SSL Labs or `openssl s_client` for the external view that a PCI scanner sees.
162+
:::
163+
164+
## Cloudflare Pages
165+
166+
It is not possible to configure minimum TLS version or cipher suites for `*.pages.dev` hostnames. These settings only apply to zones you control in the Cloudflare dashboard.
167+
168+
For payment pages hosted on a Pages project, use a [custom domain](/pages/configuration/custom-domains/) attached to a zone you control. Zone-level TLS and cipher suite settings apply to traffic served through that custom domain.
169+
170+
## PCI DSS v4 client-side requirements
171+
172+
PCI DSS v4.0 introduced two requirements for scripts running in the consumer's browser on payment pages:
173+
174+
| Requirement | Description | Cloudflare feature |
175+
| --- | --- | --- |
176+
| **6.4.3** | Maintain an inventory of all scripts on payment pages, with authorization and integrity checks | Page Shield |
177+
| **11.6.1** | Detect and alert on unauthorized changes to HTTP security headers and payment page content | Page Shield |
178+
179+
Refer to [Client-side security and PCI DSS compliance](/client-side-security/reference/pci-dss/) for setup guidance.
180+
181+
## PCI ASV scans
182+
183+
PCI DSS requires quarterly vulnerability scans by an Approved Scanning Vendor (ASV). When your domain is proxied through Cloudflare, ASV scanners interact with Cloudflare's edge network rather than your origin server directly. Several behaviors commonly arise.
184+
185+
### TCP source port behavior
186+
187+
Some ASV tools report a **TCP Source Port Pass Firewall** finding against Cloudflare-proxied IP addresses. This is a false positive caused by how Cloudflare's anycast network handles TCP connections — the behavior is a property of Cloudflare's infrastructure, not a vulnerability in your environment.
188+
189+
If your QSA or scanning tool flags this finding, provide:
190+
191+
- Cloudflare's current [Attestation of Compliance (AOC)](https://www.cloudflare.com/trust-hub/compliance-resources/pci-dss/)
192+
- Documentation that your domain is proxied through Cloudflare as a PCI DSS Level 1 Service Provider
193+
194+
Your QSA can treat this as a compensating control or documented exception based on Cloudflare's shared responsibility boundary.
195+
196+
### WAF and DDoS blocking ASV scanners
197+
198+
ASV scanners send attack-pattern traffic — SQL injection probes, XSS payloads, vulnerability fingerprinting — to test your application. Cloudflare's WAF blocks many of these probes, which is correct WAF behavior, but it can prevent the scanner from completing its assessment.
199+
200+
To allow a scan without disabling your WAF:
201+
202+
1. Obtain the source IP ranges used by your ASV vendor.
203+
2. Create a [WAF custom rule](/waf/custom-rules/) that skips managed ruleset matching for those IP ranges, scoped to your scan maintenance window.
204+
3. Remove or disable the rule immediately after the scan completes.
205+
206+
:::caution
207+
Keep the WAF exception as narrow as possible — scoped to the scanner's IP range only. Remove it as soon as scanning is complete.
208+
:::
209+
210+
### Non-standard ports
211+
212+
Cloudflare proxies a [defined set of HTTP and HTTPS ports](/fundamentals/reference/network-ports/). For ports outside that list, Cloudflare's anycast network may cause those ports to appear open at the TCP layer even though they are not proxied — the TCP connection is accepted at the edge but HTTP/HTTPS requests are blocked at the application layer before reaching your origin.
213+
214+
If an ASV scan targets non-proxied ports, findings for those ports reflect Cloudflare's edge behavior rather than your origin. Configure your scan to target the ports your application actually serves on, and provide your QSA with the [network ports reference](/fundamentals/reference/network-ports/) to document the expected behavior.
215+
216+
## Vulnerability mitigations
217+
218+
Cloudflare applies these mitigations by default across all proxied zones. No configuration is needed.
219+
220+
Cloudflare does not support:
221+
222+
- Header compression in TLS
223+
- Header compression in SPDY 3.1
224+
- RC4
225+
- SSL 3.0
226+
- Renegotiation with clients
227+
- DHE cipher suites
228+
- Export-grade ciphers
229+
230+
Cloudflare mitigates:
231+
232+
- CRIME
233+
- BREACH
234+
- POODLE
235+
- RC4 cryptographic weaknesses
236+
- SSL renegotiation attacks
237+
- Protocol downgrade attacks
238+
- FREAK
239+
- LogJam
240+
- Sweet32 — 3DES is disabled for TLS 1.1 and 1.2. For TLS 1.0, Cloudflare rotates session keys before the 32 GB threshold required for a successful attack
241+
242+
All Cloudflare servers are patched against Heartbleed, Lucky Thirteen, and CCS injection vulnerability.
243+
244+
## Common scanner false positives
245+
246+
### ROBOT
247+
248+
Security scans that report **Return of Bleichenbacher's Oracle Threat (ROBOT)** against a Cloudflare-proxied domain are false positives. Cloudflare validates RSA PKCS#1 v1.5 padding in real time and substitutes a random session key if padding is incorrect, eliminating any exploitable oracle.
68249

69250
### Sweet32 (CVE-2016-2183)
70251

71-
A vulnerability in the use of the Triple DES (3DES) encryption algorithm in the Transport Layer Security (TLS) protocol. Sweet32 is currently a proof of concept attack, there are no known examples of this in the wild. Cloudflare has manually mitigated the vulnerability for TLS 1.0 in the following manner:
252+
If a scanner flags Sweet32, verify that TLS 1.0 is disabled on your zone. Refer to [Set minimum TLS version to 1.2](#step-1-set-minimum-tls-version-to-12) for steps. With TLS 1.0 disabled, the 3DES cipher suites where Sweet32 applies are not in use and the finding does not apply to your environment.
253+
254+
### `_cfuvid` cookie missing Secure flag
72255

73-
* The attacker must collect 32GB of data from a single TLS session.
74-
* Cloudflare forces new TLS 1.0 session keys on the affected 3DES cipher well before 32GB of data is collected.
256+
Cloudflare sets the `_cfuvid` cookie on some zones for rate limiting. Some scanners may report this cookie as missing the `Secure` attribute if they scan over HTTP. If your ASV raises this finding, confirm that your ASV is scanning HTTPS endpoints and that your zone redirects HTTP traffic to HTTPS. Refer to [Always Use HTTPS](/ssl/edge-certificates/additional-options/always-use-https/) for setup steps.

0 commit comments

Comments
 (0)