Skip to content

Commit 791087c

Browse files
[SSL] AOP in dash (cloudflare#29296)
* Remove global-level for aws-alb doc: partially addresses cloudflareGH-29770 * AI-assisted: split zone-level to account for global and vet API links * AI-assisted: add <Tabs> pattern and Dash instructions * Move note on encryption mode higher and use callout * Manual: tighten up information in index and clarify cert priority * Manual: tighten up information in index and clarify cert priority * Fix e.g. and replace operation links with actual endpoint names * Update other how-tos affected with page re-org * AI-assisted: check against cloudflareGH-29400 and bring improvements * Improve text in index.mdx and update zone-level steps * More deatils on the per-hostname steps * AI-assited: inspect related docs and improve aws-alb-integration * Update per-hostname with no toggle and API in manage-certs * Apply suggestions from code review Co-authored-by: Jun Lee <junlee@cloudflare.com> --------- Co-authored-by: Jun Lee <junlee@cloudflare.com>
1 parent 39b8d7b commit 791087c

15 files changed

Lines changed: 261 additions & 140 deletions

File tree

src/content/docs/ssl/origin-configuration/authenticated-origin-pull/aws-alb-integration.mdx

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ curl --verbose https://<your-application-load-balancer>
6262

6363
## 3. Configure Cloudflare
6464

65-
1. [Upload the certificate](/ssl/edge-certificates/custom-certificates/uploading/#upload-a-custom-certificate) you created in [Step 1](#1-generate-a-custom-certificate) to Cloudflare. You should use the leaf certificate, not the root CA.
65+
1. [Upload the certificate](/api/resources/origin_tls_client_auth/subresources/hostname_certificates/methods/create/) you created in [Step 1](#1-generate-a-custom-certificate) to Cloudflare. You should use the leaf certificate, not the root CA.
6666

6767
<Render file="aop-per-hostname-upload-cert" product="ssl" />
6868

@@ -82,19 +82,6 @@ curl --verbose https://<your-application-load-balancer>
8282
}}
8383
/>
8484

85-
3. [Enable the Authenticated Origin Pulls](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/#3-enable-authenticated-origin-pulls-globally) feature on your zone.
86-
87-
<APIRequest
88-
path="/zones/{zone_id}/settings/{setting_id}"
89-
method="PATCH"
90-
json={{
91-
value: "on",
92-
}}
93-
parameters={{
94-
setting_id: "tls_client_auth",
95-
}}
96-
/>
97-
9885
:::note
9986

10087
Make sure your [encryption mode](/ssl/origin-configuration/ssl-modes/) is set to **Full** or higher. If you only want to adjust this setting for a specific hostname, use [Configuration Rules](/rules/configuration-rules/settings/#ssl).

src/content/docs/ssl/origin-configuration/authenticated-origin-pull/explanation.mdx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ sidebar:
66
head:
77
- tag: title
88
content: How Authenticated Origin Pulls works
9-
109
---
1110

1211
## Simple explanation
@@ -19,11 +18,9 @@ This block also applies for requests to [unproxied DNS records](/dns/proxy-statu
1918

2019
:::caution
2120

21+
The Cloudflare-provided certificate used by [global AOP](/ssl/origin-configuration/authenticated-origin-pull/set-up/global/) is not exclusive to your account. It only guarantees that a request is coming from the Cloudflare network.
2222

23-
Note that the certificate Cloudflare provides for you to [set up Authenticated Origin Pulls](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) is not exclusive to your account, only guaranteeing that a request is coming from the Cloudflare network.
24-
25-
For more strict security, you should set up Authenticated Origin Pulls with your own certificate and consider [other security measures for your origin](/fundamentals/security/protect-your-origin-server/).
26-
23+
For stricter security, set up [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) or [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) AOP with your own certificate and consider [other security measures for your origin](/fundamentals/security/protect-your-origin-server/).
2724

2825
:::
2926

@@ -33,7 +30,7 @@ Cloudflare enforces authenticated origin pulls by adding an extra layer of TLS c
3330

3431
For more details, refer to the [introductory blog post](https://blog.cloudflare.com/protecting-the-origin-with-tls-authenticated-origin-pulls/).
3532

36-
***
33+
---
3734

3835
### Types of handshakes
3936

@@ -60,7 +57,7 @@ This is true even if you have [**Full**](/ssl/origin-configuration/ssl-modes/ful
6057
D[External device] --Standard TLS Handshake ----> C
6158
```
6259

63-
<br/>
60+
<br />
6461

6562
This lack of authentication means that - even if your origin is [protected behind Cloudflare](/fundamentals/concepts/how-cloudflare-works/) - attackers with your origin's IP address will still receive a response from your origin for HTTPS requests.
6663

@@ -74,6 +71,6 @@ With Authenticated Origin Pulls, Cloudflare performs standard TLS handshakes bet
7471
D[External device] --Standard TLS Handshake -----x C
7572
```
7673

77-
<br/>
74+
<br />
7875

7976
This additional layer of authentication ensures that any HTTPS requests outside of Cloudflare will not receive a response from your origin.

src/content/docs/ssl/origin-configuration/authenticated-origin-pull/index.mdx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,45 @@ title: Authenticated Origin Pulls (mTLS)
44
sidebar:
55
order: 4
66
head: []
7-
description: Authenticated Origin Pulls helps ensure requests to your origin
8-
server come from the Cloudflare network.
9-
7+
description: Authenticated Origin Pulls helps ensure requests to your origin server come from the Cloudflare network.
108
---
119

12-
import { FeatureTable, Render } from "~/components"
10+
import { FeatureTable, Render } from "~/components";
1311

1412
Authenticated Origin Pulls (AOP) helps ensure requests to your origin server come from the Cloudflare network, which provides an additional layer of security on top of [Full](/ssl/origin-configuration/ssl-modes/full/) or [Full (strict)](/ssl/origin-configuration/ssl-modes/full-strict/) encryption modes.
1513

14+
:::caution[Check your encryption mode]
15+
Authenticated Origin Pulls does not apply when your [SSL/TLS encryption mode](/ssl/origin-configuration/ssl-modes/) is set to **Off** or **Flexible**.
16+
:::
17+
1618
This authentication becomes particularly important with the [Cloudflare Web Application Firewall (WAF)](/waf/). Together with the WAF, you can make sure that **all traffic** is evaluated before receiving a response from your origin server.
1719

1820
## Availability
1921

2022
<FeatureTable id="ssl.authenticated_origin_pulls" />
2123

22-
## Aspects to consider
24+
## Configuration levels
2325

24-
Although Cloudflare provides you a certificate to easily [configure zone-level authenticated origin pulls](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/), this certificate is not exclusive to your account and only guarantees that a request is coming from the Cloudflare network. If you want more strict security, you should consider [additional security measures for your origin](/fundamentals/security/protect-your-origin-server/) and upload your own certificate when setting up Authenticated Origin Pulls.
26+
There are three independent AOP configurations. Each has its own certificate and enablement setting. All of them require that you also set up your origin server - refer to each of the specific guides to learn more.
2527

26-
Using a custom certificate is possible with both [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) and [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) authenticated origin pulls and is required if you need your domain to be [FIPS](https://en.wikipedia.org/wiki/Federal_Information_Processing_Standards) compliant.
28+
- [Global](/ssl/origin-configuration/authenticated-origin-pull/set-up/global/): Uses a Cloudflare-provided certificate that is shared across all Cloudflare accounts. Applies to all proxied traffic on the zone. This is the simplest setup but only guarantees that a request is coming from the Cloudflare network.
29+
30+
- [Zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/): Uses a certificate that you upload. Applies to all proxied traffic on the zone. Provides stricter security because the certificate is exclusive to your account. Zone-level certificates take precedence over global certificates.
31+
32+
- [Per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/): Uses a certificate that you upload, applied to specific hostnames. Per-hostname certificates take precedence over zone-level and global certificates for the specified hostname.
2733

2834
:::note
2935

3036
<Render file="aop-disablement-callout" product="ssl" />
3137
:::
3238

33-
## Limitations
39+
## Aspects to consider
3440

35-
Authenticated Origin Pulls does not apply when your [SSL/TLS encryption mode](/ssl/origin-configuration/ssl-modes/) is set to **Off** or **Flexible**.
41+
If you need to guarantee that requests come from your specific Cloudflare account (not just from the Cloudflare network), set up [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) or [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) AOP with your own certificate. You should also consider [additional security measures for your origin](/fundamentals/security/protect-your-origin-server/).
42+
43+
Using a custom certificate is required if you need your domain to be [FIPS](https://en.wikipedia.org/wiki/Federal_Information_Processing_Standards) compliant.
3644

3745
## Related topics
3846

39-
* [SSL/TLS Encryption Modes](/ssl/origin-configuration/ssl-modes/)
40-
* [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/)
47+
- [SSL/TLS Encryption Modes](/ssl/origin-configuration/ssl-modes/)
48+
- [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
pcx_content_type: how-to
3+
title: Global
4+
sidebar:
5+
order: 1
6+
head:
7+
- tag: title
8+
content: Global authenticated origin pulls
9+
---
10+
11+
import { Render, Tabs, TabItem, DashButton } from "~/components";
12+
13+
When you enable global Authenticated Origin Pulls (AOP), Cloudflare uses a Cloudflare-provided client certificate for all proxied traffic to your zone. This certificate is shared across all Cloudflare accounts and guarantees that the request is coming from the Cloudflare network.
14+
15+
Global, [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/), and [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) AOP are independent configurations. Enabling or disabling one does not affect the others.
16+
17+
## Before you begin
18+
19+
- Make sure your zone is using an [SSL/TLS encryption mode](/ssl/origin-configuration/ssl-modes/) of **Full** or higher.
20+
21+
- Consider your security and certificate needs:
22+
23+
- The Cloudflare-provided certificate is not exclusive to your account. It only guarantees that a request is coming from the Cloudflare network. If you need stricter security, set up [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) or [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) AOP with your own certificate instead.
24+
25+
- Global AOP is applied to all proxied hostnames on your zone, including [custom hostnames](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/) configured on a Cloudflare for SaaS zone. If you need a different AOP certificate for different custom hostnames, use [per-hostname AOP](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/).
26+
27+
## 1. Download the Cloudflare certificate
28+
29+
[Download the Cloudflare authenticated origin pull certificate (.PEM)](/ssl/static/authenticated_origin_pull_ca.pem) and upload it to your origin server. This certificate is **not** the same as the [Cloudflare Origin CA certificate](/ssl/origin-configuration/origin-ca/).
30+
31+
## 2. Configure origin to accept client certificates
32+
33+
<Render
34+
file="aop-configure-origin"
35+
product="ssl"
36+
params={{
37+
one: "Rename the downloaded .PEM file and upload it to `/path/to/origin-pull-ca.pem` before applying the settings.",
38+
two: " Rename the downloaded .PEM file and upload it to `/etc/nginx/certs/cloudflare.crt` before applying the settings.",
39+
}}
40+
/>
41+
42+
## 3. Enable global Authenticated Origin Pulls
43+
44+
<Tabs syncKey="dashPlusAPI"> <TabItem label="Dashboard">
45+
46+
1. Go to the **Origin Server** page.
47+
48+
<DashButton url="/?to=/:account/:zone/ssl-tls/origin" />
49+
50+
2. Select the **Authenticated Origin Pulls** tab.
51+
3. In the **Global** section, switch the toggle to **On**.
52+
53+
</TabItem> <TabItem label="API">
54+
55+
To enable or disable global Authenticated Origin Pulls with the API, use the [Edit zone setting endpoint](/api/resources/zones/subresources/settings/methods/edit/) with `tls_client_auth` as the setting name in the URI path, and the `value` parameter set to your desired setting (`"on"` or `"off"`).
56+
57+
</TabItem> </Tabs>
58+
59+
## 4. Enforce validation check on your origin
60+
61+
<Render file="aop-enforce-validation" product="ssl" />

src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/manage-certificates.mdx

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,15 @@
22
pcx_content_type: how-to
33
title: Manage certificates
44
sidebar:
5-
order: 3
5+
order: 4
66
head:
77
- tag: title
88
content: Manage AOP certificates
9-
109
---
1110

1211
import { APIRequest } from "~/components";
1312

14-
Refer to the following sections to learn how to manage certificates used with the different Authenticated Origin Pulls setups.
13+
Refer to the following sections to learn how to manage certificates used with [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) and [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) Authenticated Origin Pulls. [Global AOP](/ssl/origin-configuration/authenticated-origin-pull/set-up/global/) uses a Cloudflare-provided certificate and does not require certificate management.
1514

1615
---
1716

@@ -25,13 +24,13 @@ Make sure you have [notifications](/notifications/notification-available/#ssltls
2524

2625
## Use specialized certificates
2726

28-
To apply different client certificates simultaneously at both the zone and hostname level, you can combine zone-level and per-hostname custom certificates.
27+
To apply different client certificates simultaneously at the zone and hostname level, you can combine zone-level and per-hostname custom certificates.
2928

30-
First, set up [zone-level pulls](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) using a certificate. Then, upload multiple, specialized certificates for [individual hostnames](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/). Since per-hostname certificates are more specific, they take precedence over zone certificates.
29+
First, set up [zone-level AOP](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) using your certificate. Then, upload specialized certificates for [individual hostnames](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/). Per-hostname certificates take precedence over zone-level certificates for the specified hostname.
3130

3231
---
3332

34-
## Replace a certificate without downtime
33+
## Replace a certificate without downtime via API
3534

3635
:::caution[No automatic removal]
3736
Cloudflare does not delete client certificates upon expiration unless you send a delete request to the Cloudflare API for the relevant certificate ([Delete a zone-level certificate](/api/resources/origin_tls_client_auth/subresources/zone_certificates/methods/delete/) or [Delete a hostname-level certificate](/api/resources/origin_tls_client_auth/subresources/hostname_certificates/methods/delete/)).
@@ -47,13 +46,13 @@ Cloudflare does not delete client certificates upon expiration unless you send a
4746
path="/zones/{zone_id}/origin_tls_client_auth/hostnames"
4847
method="PUT"
4948
json={{
50-
"config": [
49+
config: [
5150
{
52-
"enabled": true,
53-
"hostname": "<HOSTNAME>",
54-
"cert_id": "<CERT_ID>"
55-
}
56-
]
51+
enabled: true,
52+
hostname: "<HOSTNAME>",
53+
cert_id: "<CERT_ID>",
54+
},
55+
],
5756
}}
5857
/>
5958

@@ -69,4 +68,4 @@ If you keep both certificates, the API will state `active` for both but the most
6968

7069
:::note
7170
If you keep both certificates, the API will state `active` for both but the most recently deployed certificate will be the one enabled and used.
72-
:::
71+
:::

src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname.mdx

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,24 @@
22
pcx_content_type: how-to
33
title: Per-hostname
44
sidebar:
5-
order: 2
5+
order: 3
66
head:
77
- tag: title
88
content: Per-hostname authenticated origin pulls
99
---
1010

11-
import { AvailableNotifications, Render, Details } from "~/components";
11+
import {
12+
AvailableNotifications,
13+
Render,
14+
Details,
15+
Tabs,
16+
TabItem,
17+
DashButton,
18+
} from "~/components";
1219

13-
When you enable Authenticated Origin Pulls per hostname, all proxied traffic to the specified hostname is authenticated at the origin web server. You can use client certificates from your Private PKI to authenticate connections from Cloudflare.
20+
When you enable per-hostname Authenticated Origin Pulls (AOP), all proxied traffic to the specified hostname is authenticated at the origin web server using a certificate that you upload. You can use client certificates from your Private PKI to authenticate connections from Cloudflare.
21+
22+
[Global](/ssl/origin-configuration/authenticated-origin-pull/set-up/global/), [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/), and per-hostname AOP are independent configurations. Enabling or disabling one does not affect the others. Per-hostname certificates take precedence over zone-level and global certificates for the specified hostname.
1423

1524
## Before you begin
1625

@@ -27,7 +36,25 @@ Refer to the steps below for an example of how to generate a custom certificate
2736

2837
## 1. Upload custom certificate
2938

30-
Use the [Upload A Hostname Client Certificate](/api/resources/origin_tls_client_auth/subresources/hostname_certificates/methods/create/) endpoint to upload your custom certificate.
39+
<Tabs syncKey="dashPlusAPI"> <TabItem label="Dashboard">
40+
41+
1. Go to the **Origin Server** page.
42+
43+
<DashButton url="/?to=/:account/:zone/ssl-tls/origin" />
44+
45+
2. Select the **Authenticated Origin Pulls** tab.
46+
3. In the **Per-hostname** section, select **Upload certificate**.
47+
4. Paste the certificate and private key, then select **Continue**.
48+
:::note
49+
You must upload a [leaf certificate](/ssl/concepts/#chain-of-trust). If you upload a root CA instead, the upload will fail.
50+
:::
51+
5. Review your certificate details, save the certificate ID for future reference, and select **Continue**.
52+
6. On the **Associate Hostnames** page, enter the fully qualified domain name that should use this certificate and select **Add** for each one. You can also skip this step and associate hostnames later.
53+
7. Select **Save** to confirm.
54+
55+
</TabItem> <TabItem label="API">
56+
57+
Use the [Upload a Hostname Client Certificate](/api/resources/origin_tls_client_auth/subresources/hostname_certificates/methods/create/) endpoint to upload your custom certificate.
3158

3259
:::note
3360

@@ -36,7 +63,9 @@ You must upload a [leaf certificate](/ssl/concepts/#chain-of-trust). If you uplo
3663

3764
<Render file="aop-per-hostname-upload-cert" product="ssl" />
3865

39-
In the API response, save the certificate `id` since it will be required in step 4.
66+
In the API response, save the certificate `id` since it will be required in step 3.
67+
68+
</TabItem> </Tabs>
4069

4170
## 2. Configure origin to accept client certificates
4271

@@ -48,10 +77,29 @@ In the API response, save the certificate `id` since it will be required in step
4877

4978
## 3. Enable Authenticated Origin Pulls for the hostname
5079

51-
Use the Cloudflare API to send a [`PUT`](/api/resources/origin_tls_client_auth/subresources/hostnames/methods/update/) request to enable Authenticated Origin Pulls for specific hostnames.
80+
<Tabs syncKey="dashPlusAPI"> <TabItem label="Dashboard">
81+
82+
:::note
83+
For per-hostname AOP, the enablement happens as you associate a hostname. If you had already associated hostnames as you uploaded the certificate, you can skip this step.
84+
:::
85+
86+
1. Go to the **Origin Server** page.
87+
88+
<DashButton url="/?to=/:account/:zone/ssl-tls/origin" />
89+
90+
2. Select the **Authenticated Origin Pulls** tab.
91+
3. In the **Per-hostname** section, find the certificate that should be used and associate the hostname with it.
5292

5393
If you had set up logging on your origin during step 2, test and confirm that Authenticated Origin Pulls is working.
5494

95+
</TabItem> <TabItem label="API">
96+
97+
Use the [Enable or Disable a Hostname for Client Authentication](/api/resources/origin_tls_client_auth/subresources/hostnames/methods/update/) endpoint to enable Authenticated Origin Pulls for specific hostnames.
98+
99+
If you had set up logging on your origin during step 2, test and confirm that Authenticated Origin Pulls is working.
100+
101+
</TabItem> </Tabs>
102+
55103
## 4. Enforce validation check on your origin
56104

57105
<Render file="aop-enforce-validation" product="ssl" />
@@ -71,4 +119,4 @@ You can configure alerts to receive notifications before your AOP certificates e
71119

72120
Refer to [Manage certificates](/ssl/origin-configuration/authenticated-origin-pull/set-up/manage-certificates/) for further options.
73121

74-
To learn how to remove the configuration, refer to [Rollback](/ssl/origin-configuration/authenticated-origin-pull/set-up/rollback/).
122+
To learn how to remove the configuration, refer to [Rollback](/ssl/origin-configuration/authenticated-origin-pull/set-up/rollback/).

src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/rollback.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
pcx_content_type: how-to
33
title: Roll back per-hostname AOP
44
sidebar:
5-
order: 4
5+
order: 5
66
label: Rollback
77
---
88

0 commit comments

Comments
 (0)