-
Notifications
You must be signed in to change notification settings - Fork 10k
[SSL, SaaS] Clarify Min TLS version for zone vs CH #24890
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
RebeccaTamachiro
merged 6 commits into
production
from
rebecca/ssl-api-created-ch-min-tls
Sep 10, 2025
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
96241d0
Small style and naming adjustments
RebeccaTamachiro 563c4c8
Replace /ssl/ links from overview and create new outline for Min TLS …
RebeccaTamachiro 79a1739
Add intro for #scope, organize bullets, and add setup placeholders
RebeccaTamachiro a414d38
Text adjustments and consolidate info from create-ch content
RebeccaTamachiro 06e8cc7
Add APIRequest example for getting CH TLS settings
RebeccaTamachiro 3f1631e
Add new section to minimum-tls.mdx linking to CF4SaaS
RebeccaTamachiro File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,13 +8,13 @@ head: | |
| content: TLS Settings — Cloudflare for SaaS | ||
| --- | ||
|
|
||
| import { AvailableNotifications, Details, Render } from "~/components"; | ||
| import { AvailableNotifications, Details, Render, APIRequest } from "~/components"; | ||
|
|
||
| [Mutual TLS (mTLS)](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/) adds an extra layer of protection to application connections by validating certificates on the server and the client. When building a SaaS application, you may want to enforce mTLS to protect sensitive endpoints related to payment processing, database updates, and more. | ||
|
|
||
| [Minimum TLS Version](/ssl/edge-certificates/additional-options/minimum-tls/) allows you to choose a cryptographic standard per custom hostname. Cloudflare recommends TLS 1.2 to comply with the Payment Card Industry (PCI) Security Standards Council. | ||
| [Minimum TLS Version](#minimum-tls-version) only allows HTTPS connections from visitors that support the selected TLS protocol version or newer. Cloudflare recommends TLS 1.2 to comply with the Payment Card Industry (PCI) Security Standards Council. As a SaaS provider, you can control the Minimum TLS version for your zone as a whole, as well as for individual custom hostnames. | ||
|
|
||
| [Cipher suites](/ssl/edge-certificates/additional-options/cipher-suites/) are a combination of ciphers used to negotiate security settings during the [SSL/TLS handshake](https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/). As a SaaS provider, you can [specify configurations for cipher suites](#cipher-suites) on your zone as a whole and cipher suites on individual custom hostnames via the API. | ||
| [Cipher suites](#cipher-suites) are a combination of ciphers used to negotiate security settings during the [SSL/TLS handshake](https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/). As a SaaS provider, you can specify configurations for cipher suites on your zone as a whole and cipher suites on individual custom hostnames via the API. | ||
|
|
||
| :::caution | ||
| When you [issue a custom hostname certificate](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/) with wildcards enabled, any cipher suites or Minimum TLS settings applied to that hostname will only apply to the direct hostname. | ||
|
|
@@ -27,25 +27,94 @@ However, if you want to update the Minimum TLS settings for all wildcard hostnam | |
| Once you have [added a custom hostname](/cloudflare-for-platforms/cloudflare-for-saas/start/getting-started/), you can enable mTLS by using Cloudflare Access. Go to [Cloudflare Zero Trust](https://one.dash.cloudflare.com/) and [add mTLS authentication](/cloudflare-one/identity/devices/access-integrations/mutual-tls-authentication/) with a few clicks. | ||
|
|
||
| :::note | ||
|
|
||
| Currently, you cannot add mTLS policies for custom hostnames using [API Shield](/api-shield/security/mtls/). | ||
| ::: | ||
|
|
||
| ## Minimum TLS Version | ||
|
|
||
| :::note | ||
| While TLS 1.3 is the most recent and secure version, it is not supported by some older devices. Refer to Cloudflare's recommendations when [deciding what version to use](/ssl/reference/protocols/#decide-which-version-to-use). | ||
| ::: | ||
|
|
||
| ## Enable Minimum TLS Version | ||
| ### Scope | ||
|
|
||
| 1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com) and navigate to your account and website. | ||
| Minimum TLS version exists both as a [zone-level setting](/ssl/edge-certificates/additional-options/minimum-tls/) (under **Edge certificates** > **Minimum TLS Version**) and as a custom hostname setting. What this implies is: | ||
|
|
||
| 2. Select **SSL/TLS** > **Custom Hostnames**. | ||
| - For custom hostnames created via API, it is possible not to explicitly define a value for `min_tls_version`. When that is the case, whatever value is defined as your zone's minimum TLS version will be applied. To confirm whether a given custom hostname has a specific minimum TLS version set, use the following API call. | ||
|
|
||
| 3. Find the hostname to which you want to apply Minimum TLS Version. Select **Edit**. | ||
| <Details header="Check custom hostname settings TLS settings"> | ||
|
|
||
| 4. Choose the desired TLS version under **Minimum TLS Version** and click **Save**. | ||
| <APIRequest | ||
| path="/zones/{zone_id}/custom_hostnames/{custom_hostname_id}" | ||
| method="GET" | ||
| /> | ||
|
|
||
| :::note | ||
| ```json title="Response example" collapse={5-16, 21-40} ""settings": {}," | ||
| "success": true, | ||
| "result": { | ||
| "id": "<CUSTOM_HOSTNAME_ID>", | ||
| "ssl": { | ||
| "id": "<CERTIFICATE_ID>", | ||
| "bundle_method": "ubiquitous", | ||
| "certificate_authority": "<CERTIFICATE_AUTHORITY>", | ||
| "custom_certificate": "", | ||
| "custom_csr_id": "", | ||
| "custom_key": "", | ||
| "expires_on": "", | ||
| "hosts": [ | ||
| "app.example.com", | ||
| "*.app.example.com" | ||
| ], | ||
| "issuer": "", | ||
| "method": "http", | ||
| "settings": {}, | ||
| "signature": "SHA256WithRSA", | ||
| "type": "dv", | ||
| "uploaded_on": "2020-02-06T18:11:23.531995Z", | ||
| "validation_errors": [ | ||
| { | ||
| "message": "SERVFAIL looking up CAA for app.example.com" | ||
| } | ||
| ], | ||
| "validation_records": [ | ||
| { | ||
| "emails": [ | ||
| "[email protected]", | ||
| "[email protected]" | ||
| ], | ||
| "http_body": "ca3-574923932a82475cb8592200f1a2a23d", | ||
| "http_url": "http://app.example.com/.well-known/pki-validation/ca3-da12a1c25e7b48cf80408c6c1763b8a2.txt", | ||
| "txt_name": "_acme-challenge.app.example.com", | ||
| "txt_value": "810b7d5f01154524b961ba0cd578acc2" | ||
| } | ||
| ], | ||
| "wildcard": false | ||
| }, | ||
| } | ||
| ``` | ||
|
|
||
| While TLS 1.3 is the most recent and secure version, it is not supported by some older devices. Refer to Cloudflare's recommendations when [deciding what version to use](/ssl/reference/protocols/#decide-which-version-to-use). | ||
| ::: | ||
| </Details> | ||
|
|
||
| - Whenever you make changes to a custom hostname via dashboard, the value that is set for Minimum TLS version will apply. If you have a scenario as explained in the bullet above, the dashboard change will override the zone-level configuration that was being applied. | ||
|
|
||
| - For custom hostnames with wildcards enabled, the direct custom hostname you create (for example, `saas-customer.test`) will use the hostname-specific setting, while the others (`sub1.saas-customer.test`, `sub2.saas-customer.test`, etc) will default to the zone-level setting. | ||
|
|
||
| ### Setup | ||
|
|
||
| <Details header="Minimum TLS version for your zone"> | ||
|
|
||
| Refer to [Minimum TLS version - SSL/TLS](/ssl/edge-certificates/additional-options/minimum-tls/#zone-level). | ||
|
|
||
| </Details> | ||
|
|
||
| <Details header="Minimum TLS version for custom hostname"> | ||
|
|
||
| 1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com) and select your account and website. | ||
| 2. Go to **SSL/TLS** > **Custom Hostnames**. | ||
| 3. Find the hostname to which you want to apply Minimum TLS Version. Select **Edit**. | ||
| 4. Choose the desired TLS version under **Minimum TLS Version** and select **Save**. | ||
|
|
||
| </Details> | ||
|
|
||
| ## Cipher suites | ||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just checking that we don't have a button for this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not yet. Zone-level.