Skip to main content

    Cloudflare SSL Modes Explained: Flexible, Full, and Full (Strict)

    Your Cloudflare SSL mode decides whether the hop to your origin is encrypted at all. What Off, Flexible, Full and Full (Strict) do, and which to pick.

    MS
    My-SSL Team
    ·
    15 min read
    ·
    Published August 8, 2026
    ·
    Last updated August 8, 2026

    In short

    A Cloudflare SSL/TLS encryption mode controls one thing: how Cloudflare connects to your origin server. Flexible sends that second hop in cleartext HTTP. Full encrypts it but accepts whatever certificate the origin presents, including an expired or self-signed one. Full (Strict) encrypts it and requires a certificate that is unexpired, matches the hostname, and comes from a publicly trusted CA or Cloudflare's own Origin CA — the only mode that gives you authenticated end-to-end encryption. As of August 2026 the documented default for new and migrated zones is Automatic SSL/TLS, which detects what your origin supports and moves you up on its own.

    How each Cloudflare encryption mode treats the second hop, from Cloudflare's edge to your origin serverAt the top, a request travels in two hops: visitor to Cloudflare, then Cloudflare to the origin server. The first hop is the HTTPS connection the visitor's padlock refers to. The second hop is the one the encryption mode decides. Below, four rows compare the modes. Off leaves both hops as cleartext HTTP. Flexible encrypts the first hop only and sends the second hop in cleartext, requiring no certificate on the origin. Full encrypts the second hop but performs no validation, so an expired, self-signed or mismatched certificate is accepted. Full strict, highlighted in gold, encrypts the second hop and requires a certificate that is unexpired, hostname-matching, and issued by a publicly trusted CA or Cloudflare's Origin CA.The padlock only proves the first hopVisitorsees the padlockCloudflare edgeterminates the visitor's TLSYour originthe actual web serverHOP 1HTTPS, handled by CloudflareHOP 2your encryption mode decides thisMODEHOP 2 TRAFFICORIGIN CERTIFICATEOffHTTPS is redirected down to HTTPCleartextNot usedFlexiblevisitor sees a padlock regardlessCleartextNone neededFullencrypted, but to nobody in particularEncryptedNever validatedFull (Strict)the only authenticated end-to-end optionEncryptedUnexpired, matching, trustedA visitor cannot tell these four apart. The padlock looks identical in every row.
    This is why "we have SSL, we're on Cloudflare" is not an answer to a security question. The interesting half of the journey is the half the browser never sees.

    Put a site behind Cloudflare and the padlock appears within minutes, usually before you've touched the origin server at all. That padlock is real, and it is also only telling you about half the journey. Cloudflare terminates the visitor's TLS connection at the edge and then makes a second, separate connection to your server — and the setting buried under SSL/TLS → Overview decides whether that second connection is encrypted, whether Cloudflare bothers checking who answered, or whether it happens in the clear while the visitor's browser reports everything as secure.

    Most write-ups on this topic describe a Cloudflare dashboard from several years ago, when Flexible was the default and the four modes sat in a radio-button list waiting for you to pick one. That is no longer how it works, and the difference matters if you are debugging a redirect loop or wondering why your mode changed without anyone changing it.

    What the SSL mode actually controls

    The encryption mode governs the connection between Cloudflare's edge and your origin server, and nothing else. It does not affect the certificate visitors see, which is the free Universal SSL certificate Cloudflare issues for your zone. It does not change your TLS version, your cipher suites, or your HSTS policy. Change the mode and exactly one thing changes: what Cloudflare does on the way to your server.

    That separation is what confuses people. A proxied request is two independent TLS decisions stacked on top of each other, and the browser only ever participates in the first one. Your visitor's padlock is a statement about the leg between them and Cloudflare. It carries no information whatsoever about the leg between Cloudflare and you — a site on Flexible with an origin serving plain HTTP over the public internet presents an identical padlock to a site on Full (Strict) with a properly validated origin certificate.

    If you've read our guide to TLS termination and SSL offloading, this is the same architecture: a proxy ends the client's TLS session and opens its own toward the backend. Cloudflare is a very large, very distributed instance of that pattern, and the encryption mode is simply its name for the re-encryption policy.

    Automatic SSL/TLS: the default most guides still miss

    Automatic SSL/TLS is Cloudflare's documented default encryption setting as of August 2026, and it is being rolled out to zones gradually. Instead of holding one fixed mode, it uses the probes originally built for the SSL/TLS Recommender to work out what your origin can support, then applies the most secure mode available to it. If your zone hasn't been migrated yet, you'll only see the Custom SSL/TLS options, which behave exactly like the manual mode setting always has.

    The probing is more careful than "try HTTPS and see". Cloudflare crawls your site with the Cloudflare-SSLDetector user agent — a trusted bot that bypasses robots.txt unless a rule targets it by name — pulls the same content over both HTTP and HTTPS, and runs a content-similarity comparison. If the two versions disagree, or if the origin is throwing 5XX errors, the upgrade doesn't proceed. Scans run roughly once a month, and stop entirely once a zone is already on the most secure mode.

    How Automatic SSL/TLS ramps a zone onto a more secure encryption modeA left-to-right sequence. Cloudflare's Recommender first crawls the site over both HTTP and HTTPS and compares the content. If a more secure mode is possible, the upgrade starts at one percent of traffic, then continues in ten percent increments, then reaches one hundred percent and the setting becomes permanent. A branch below the sequence, highlighted in gold, shows that if origin connectivity fails at any point, Cloudflare aborts, rolls all traffic back to the previous mode, and logs the failure. A note states that the mode is never changed to a less secure one.How Automatic SSL/TLS moves a zoneProbecrawls over HTTPand HTTPS, compares1% of trafficthe new mode is triedon a thin slice first10% incrementsslower when leavingFlexible, for cache warm-up100%the setting becomespermanentOrigin connectivity fails at any point?Cloudflare aborts, rolls traffic back to the previous mode, and logs itThe ratchet only turns one wayAn expired origin certificate will not move a zone from Full (strict) back down to Full. It breaks instead.
    The one-way ratchet in the dashed box is the part worth internalising: an automated upgrade will not rescue you from an origin certificate you let expire.

    When an upgrade does go ahead, it starts on 1% of traffic and climbs in 10% increments to 100%, at which point the zone's setting is permanently updated. A failure in origin connectivity part-way through aborts the whole thing: traffic rolls straight back to the previous mode and the failure is logged. Moves out of Flexible get extra caution, because switching the origin scheme from HTTP to HTTPS alters cache keys, so Cloudflare slows the ramp to let the cache warm up before resuming.

    The ratchet turns one way only

    Automatic SSL/TLS will never move a zone to a less secure mode. Cloudflare's documentation gives the example directly: if your origin certificate expires, a zone on Full (strict) is not quietly dropped to Full. It stays on Full (strict) and your visitors get an error page instead. Automation raises the floor; it does not catch you when you fall through it. Origin certificate expiry remains entirely your problem to monitor.

    Cloudflare emails a weekly digest of upgraded zones, though currently only to Super Admins — worth knowing if you manage zones under an account where you hold a narrower role, because you will simply never see the notice. To opt a zone out and go back to manual control, set ssl_automatic_mode to custom with a PATCH to /zones/{zone_id}/settings/ssl_automatic_mode, or pick Custom SSL/TLS in the dashboard.

    What each mode does

    Under Custom SSL/TLS there are four modes, and they form a ladder from no encryption to authenticated encryption. Off serves everything as cleartext HTTP. Flexible encrypts the visitor leg only. Full encrypts both legs but validates nothing on the origin. Full (Strict) encrypts both legs and requires a valid, trusted, hostname-matching certificate on the origin. Cloudflare's own guidance is unambiguous: use Full or Full (Strict) if you possibly can.

    Off

    Setting the mode to Off redirects HTTPS requests down to plaintext HTTP. Nothing is encrypted anywhere — not between the visitor and Cloudflare, not between Cloudflare and you. Modern browsers mark such pages as not secure, and there is no realistic scenario in 2026 where this is the right choice for a public site. If you're here because something is showing a "not secure" warning, check this setting before anything else.

    Flexible

    Flexible gives visitors HTTPS to Cloudflare while every connection from Cloudflare to your origin is made over plain HTTP. No certificate is needed on the origin, which is the entire appeal: it's the fastest way to get a padlock onto a server that can't serve TLS. Cloudflare's own documentation advises against it for anything handling sensitive information such as personalised data or user logins.

    There's a limitation here that trips up anyone running on a non-standard port: Flexible only applies to HTTPS on port 443. Traffic on other HTTPS ports falls back to Full behaviour, meaning Cloudflare will suddenly attempt an encrypted connection to an origin you never gave a certificate. A zone that "works on 443 but breaks on 8443" is usually this rule and not a firewall.

    Full

    Full matches the visitor's protocol: an HTTPS request from a visitor becomes an HTTPS request to your origin. The traffic is genuinely encrypted. What it isn't is authenticated — Cloudflare's documentation states that the certificate presented by the origin will not be validated in any way. Expired, self-signed, revoked, issued for a different hostname: all accepted. Cloudflare spells out the consequence too, warning that without Full (strict) a malicious party could technically hijack the connection and present their own certificate.

    That makes Full a reasonable waypoint and a poor destination. It defeats passive eavesdropping on the path to your origin while leaving active interception on the table. It exists mainly for origins carrying self-signed certificates that can't be replaced yet.

    Full (Strict)

    Full (Strict) is Full plus certificate validation, and the validation has three specific requirements. The certificate must be unexpired, meaning the current time falls between its notBefore and notAfter dates. It must contain a Common Name or Subject Alternative Name matching the requested hostname. And its issuer must appear in Cloudflare's list of publicly trusted certificate authorities, or be Cloudflare's Origin CA. Miss any one and visitors get a 526.

    Sites that need the strongest posture pair Full (Strict) with Authenticated Origin Pulls, which makes the origin verify that requests genuinely came from Cloudflare before it answers them. That closes the remaining gap — an attacker who discovers your origin's IP address and connects to it directly, bypassing Cloudflare entirely.

    Why Flexible causes ERR_TOO_MANY_REDIRECTS

    The loop happens when a zone is on Flexible and the origin server has its own HTTP-to-HTTPS redirect rule. Cloudflare receives the visitor's HTTPS request and fetches from the origin over plain HTTP. The origin sees HTTP, answers with a 301 to the HTTPS URL, Cloudflare relays that redirect, the browser requests the HTTPS URL again — and Cloudflare fetches over HTTP again. Nothing in the cycle changes, so the browser gives up after roughly twenty hops.

    The four-step cycle that produces ERR_TOO_MANY_REDIRECTS on a Cloudflare zone set to FlexibleFour boxes arranged in a closed loop. Step one: the browser requests the HTTPS URL. Step two: Cloudflare, set to Flexible, fetches the page from the origin over plain HTTP. Step three, highlighted in gold: the origin sees an HTTP request and answers with a 301 redirect to the HTTPS version, because that is exactly what it was configured to do. Step four: Cloudflare passes that redirect back to the browser, which asks for the HTTPS URL again, returning to step one. A note explains that nothing in the cycle ever changes, so the browser gives up after roughly twenty hops.Flexible plus an origin redirect rule is a closed loop1. Browser asks for https://sitea perfectly ordinary HTTPS request2. Cloudflare fetches over HTTPbecause the mode says Flexible3. Origin answers 301 to https://doing exactly what you configured4. Redirect reaches the browserwhich requests https://site againNothing in the cycle ever changes stateso the browser stops after about twenty hops and shows ERR_TOO_MANY_REDIRECTS
    Neither component is broken. The origin's redirect rule is correct and Cloudflare is doing what Flexible tells it to do; it's the combination that has no exit.

    What makes this one hard to diagnose is that neither piece is misconfigured on its own. The redirect rule is exactly what every HTTPS hardening guide tells you to write. Flexible is a supported Cloudflare setting. Put them together and you get a state machine with no exit condition, which is why the symptom appears the instant a site is proxied and disappears the instant it's grey-clouded — behaviour that sends most people hunting through .htaccess for a bug that isn't there.

    There are two real fixes and one that only looks like a fix. Install a certificate on the origin and move the zone to Full (Strict): Cloudflare's request then arrives as HTTPS, the origin's redirect condition is already satisfied, and the page is served on the first attempt. Alternatively, delete the origin's redirect rule and let Cloudflare issue the redirect at the edge with Always Use HTTPS, which is the approach our HTTP-to-HTTPS redirect guide recommends for any proxied site. The non-fix is turning off the origin redirect and staying on Flexible — the loop stops, and every request to your server continues travelling the public internet in cleartext.

    If you run behind a load balancer rather than Cloudflare, the same failure mode shows up with a different remedy: condition the redirect on the X-Forwarded-Proto header instead of the connection scheme your origin observes.

    Which mode should you use?

    Full (Strict) is the answer for essentially every production site, and the only question worth spending time on is which certificate you put on the origin to get there. Use Full temporarily while migrating an origin whose certificate you can't replace today. Use Flexible only as a short bridge for a server that genuinely cannot serve TLS, and keep logins off it while you're there. Off has no legitimate use on a public site.

    A decision path for choosing a Cloudflare encryption mode and the right origin certificateThe path starts with a single question: can your origin server serve HTTPS on port 443? If no, the answer is to fix that first, using Flexible only as a temporary bridge while you do. If yes, the next question is whether anything other than Cloudflare ever connects to the origin, such as a grey-clouded record, a direct hostname, a load balancer or an external health check. If nothing else connects, a free Cloudflare Origin CA certificate is enough and the zone belongs on Full strict. If something else does connect, you need a publicly trusted certificate on the origin, and the zone still belongs on Full strict. Both end states are highlighted in gold and both read Full strict.Two questions decide itCan the origin serve HTTPS on port 443?any certificate at all, even self-signedNoFix that firstFlexible is a bridge, not adestination. No logins over it.YesDoes anything but Cloudflare reach the origin?grey-clouded records, a direct hostname,a load balancer, an external health checkNoYesFull (Strict)A free Cloudflare Origin CA certificateis enough. Note the expiry date yourself.Full (Strict)with a publicly trustedcertificate on the originThe mode is the same either way. The second question only changes which certificate you install.
    Both branches land on the same mode, which is the point. What the second question decides is which certificate the origin should be holding, and that turns out to be the only decision with any real consequences.

    The sequencing matters more than the choice. Install the origin certificate first, confirm the origin answers on 443, and only then change the mode. Flip the mode first and you get an immediate 526 on a zone that was working sixty seconds earlier, which is a bad way to learn this.

    One caveat about Cloudflare's automation: because Automatic SSL/TLS only upgrades, it will happily leave you on Flexible indefinitely if your origin never becomes capable of HTTPS. Nothing in the system nags you. A zone can sit on Flexible for years, passing every uptime check, serving a padlock to every visitor, with the actual traffic in the clear the entire time.

    Getting a certificate onto the origin

    Full (Strict) accepts two kinds of certificate on the origin: one from a publicly trusted CA, or one from Cloudflare's own Origin CA. Both are available free, both satisfy the validation, and they behave very differently outside Cloudflare. The choice comes down to a single question: does anything other than Cloudflare's proxy ever open a connection to that server?

    A Cloudflare Origin CA certificate is issued by Cloudflare's private CA. Cloudflare's edge trusts it; no browser or operating system trust store contains it. Because visitors never see it — they're talking to Cloudflare's Universal SSL certificate — that doesn't matter as long as every request arrives through the proxy. It can be issued for up to 15 years, and Cloudflare notes that it does not currently send expiration notifications for these certificates, so tracking the expiry date is on you.

    That "as long as every request arrives through the proxy" clause is where Origin CA certificates catch people out. Grey-cloud a DNS record to debug something and the hostname immediately throws a trust error. Point an external uptime monitor at the origin's real address and it reports a failure. Add a load balancer, a staging hostname, an API client pinned to the origin IP, or a partner's health check, and each one hits a certificate nothing outside Cloudflare will validate.

    A publicly trusted certificate avoids all of that, because it validates everywhere: through the proxy, around the proxy, and on the day you decide to move off Cloudflare. That flexibility is the argument for putting one of our SSL certificates on the origin rather than a proxy-locked one — particularly on infrastructure where more than one system needs to trust that server. A DV certificate is enough for the Full (Strict) check; Cloudflare validates the chain, the dates, and the hostname, and has no opinion about the validation level above that.

    Whichever you choose, the certificate has to cover the hostname Cloudflare requests. That's usually your apex domain plus a wildcard for subdomains, and it's the same SAN arithmetic covered in our comparison of wildcard and multi-domain certificates.

    What shorter certificate lifetimes mean for your origin

    Publicly trusted TLS certificates are on a shrinking schedule that Origin CA certificates sit outside entirely. Under CA/Browser Forum Ballot SC-081v3, the maximum validity for a publicly trusted certificate drops to 200 days on March 15, 2026, then 100 days on March 15, 2027, and 47 days on March 15, 2029. Domain validation reuse shortens alongside it, reaching 10 days in 2029. Cloudflare's Origin CA is a private CA, so its certificates are unaffected and can still be issued for 15 years.

    It's tempting to read that as a straightforward win for Origin CA, and for a single-server setup that never sees traffic from anywhere but Cloudflare, it broadly is. The renewal treadmill on that hop disappears. What you're buying with it, though, is a hard dependency: the origin now holds a credential that only one company's infrastructure will accept, and the "just point DNS somewhere else for an hour" escape hatch closes.

    For a publicly trusted origin certificate the answer is automation rather than avoidance. Once renewals land inside a 47-day window, a certificate you replace by hand twice a year becomes one you replace eight times a year, and manual renewal stops scaling well before then. Our guides to preparing for 47-day certificates and ACME automation with Certbot cover the mechanics, and both apply to an origin behind Cloudflare exactly as they do to a directly exposed server.

    There's one Cloudflare-specific trap worth naming. ACME's HTTP-01 challenge needs Let's Encrypt to reach /.well-known/acme-challenge/ on your origin, and a proxied zone means that request goes to Cloudflare first. It usually works, but page rules, a "Under Attack" security level, or an aggressive WAF rule can quietly break the challenge and your renewal fails at 3am on a schedule nobody is watching. The DNS-01 challenge, which Cloudflare's API supports well, sidesteps the whole issue.

    Errors 525 and 526: what each one tells you

    Both errors appear after you move a zone to Full or Full (Strict), and they point at different stages of the same connection. A 525 means the TLS handshake between Cloudflare and your origin never completed — commonly because nothing is listening on port 443 at all. A 526 means the handshake got as far as the origin presenting a certificate and Cloudflare rejected it, which only happens in Full (Strict).

    ErrorWhat failedWhere to look first
    525TLS handshake never completedIs anything listening on 443? Is the firewall allowing Cloudflare's IP ranges? Does the origin support a TLS version Cloudflare offers?
    526Certificate presented but rejectedExpired certificate, self-signed certificate, hostname not in the CN or SAN, or a missing intermediate in the chain.
    520Origin returned something unexpectedNot a certificate problem. Usually the origin crashing, an empty response, or oversized headers.

    A missing intermediate is the sneaky one. A chain that a browser repairs on its own — because it happens to have cached the intermediate from another site — will still fail Cloudflare's validation, so the certificate looks fine in your browser and produces a 526 through the proxy. Our guide to the certificate chain covers assembling the full bundle correctly.

    To diagnose either error, test the origin directly rather than through the proxy. From a shell, openssl s_client -connect origin-ip:443 -servername example.com shows you the exact chain Cloudflare is being handed. If the origin is publicly reachable on its own hostname, our SSL checker reports the same information — expiry, chain completeness, hostname match — without the shell. More error codes and their meanings live in our SSL certificate errors reference.

    Related reading

    Getting to Full (Strict) is a twenty-minute job on most servers, and it's the difference between traffic that's encrypted and traffic that's encrypted to a server you've actually identified. If the origin needs a certificate that works beyond Cloudflare's proxy as well as behind it, our range of SSL certificates covers DV through EV, all of which pass the Full (Strict) check equally.

    Frequently Asked Questions

    Get instant answers to common questions about SSL certificates and our services.

    Still Have Questions?

    Our SSL experts are available 24/7 to help with any questions about certificates, installation, or technical issues.