启用按主机名 Authenticated Origin Pulls (AOP) 时,到指定主机名的所有代理流量在源站 Web 服务器上使用您上传的证书进行身份验证。您可以使用私有 PKI 的客户端证书验证来自 Cloudflare 的连接。
全局、zone 级别和按主机名 AOP 是独立配置。启用或禁用其中一个不会影响其他配置。对于指定主机名,按主机名证书优先于 zone 级别和全局证书。
请参阅以下步骤了解如何使用 OpenSSL 生成 Custom 证书的示例。用于签发 Custom 证书的 CA 根证书应与将上传到源站的 CA 相同。
OpenSSL 示例
- 运行以下命令生成 4096 位 RSA 私钥,使用 AES-256 加密。出现提示时输入密码短语。
openssl genrsa -aes256 -out rootca.key 4096- 创建 CA 根证书。出现提示时,填写要包含在证书中的信息。对于
Common Name字段,使用域名作为值,而非主机名。
openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1826 -out rootca.crt- 创建证书签名请求(CSR)。出现提示时,填写要包含在请求中的信息。对于
Common Name字段,使用主机名作为值。
openssl req -new -nodes -out cert.csr -newkey rsa:4096 -keyout cert.key- 使用前面步骤创建的
rootca.key和rootca.crt签署证书。
openssl x509 -req -in cert.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out cert.crt -days 730 -sha256 -extfile ./cert.v3.ext- 确保证书扩展文件
cert.v3.ext指定以下内容:
basicConstraints=CA:FALSE-
前往 Origin Server(源站服务器) 页面。
Go to Origin Server ↗ -
选择 Authenticated Origin Pulls(已验证源站拉取) 选项卡。
-
在 Per-hostname(按主机名) 部分,选择 Upload certificate(上传证书)。
-
粘贴证书和私钥,然后选择 Continue(继续)。
-
查看证书详情,保存证书 ID 供将来参考,然后选择 Continue(继续)。
-
在 Associate Hostnames(关联主机名) 页面上,输入应使用此证书的完全限定域名,并为每个域名选择 Add(添加)。您也可以跳过此步骤,稍后关联主机名。
-
选择 Save(保存) 确认。
使用 Upload a Hostname Client Certificate 端点上传 Custom 证书。
使用以下命令通过 API 上传 per-hostname 证书:
MYCERT="$(cat cert.crt|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"
MYKEY="$(cat cert.key|perl -pe 's/\r?\n/\\n/'|sed -e's/..$//')"
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method":"ubiquitous"
}
EOF
))
# Push the certificate
curl --silent \
"https://api.cloudflare.com/client/v4/zones/$ZONEID/origin_tls_client_auth/hostnames/certificates" \
--header "Content-Type: application/json" \
--header "X-Auth-Email: $MYAUTHEMAIL" \
--header "X-Auth-Key: $MYAUTHKEY" \
--data "$request_body"在 API 响应中,保存证书 id,因为第 3 步需要它。
安装证书后,设置源站 Web 服务器以接受客户端证书。
请查看下方 Apache 和 NGINX 示例,或参阅源站 Web 服务器文档——例如 HAProxy ↗、Traefik ↗、Caddy ↗。
Apache 示例
SSLCACertificateFile /path/to/origin-pull-ca.pem在此示例中,您会将证书保存到 /path/to/origin-pull-ca.pem。
NGINX 示例
ssl_verify_client optional;
ssl_client_certificate /etc/nginx/certs/cloudflare.crt;在此示例中,您会将证书保存到 /etc/nginx/certs/cloudflare.crt。
此时,您可能还希望在源站启用日志记录,以便验证配置是否正常工作。
-
前往 Origin Server(源站服务器) 页面。
Go to Origin Server ↗ -
选择 Authenticated Origin Pulls(已验证源站拉取) 选项卡。
-
在 Per-hostname(按主机名) 部分,找到应使用的证书并与其关联主机名。
如果您在第 2 步期间在源站上设置了日志记录,请测试并确认 Authenticated Origin Pulls 正常工作。
使用 Enable or Disable a Hostname for Client Authentication 端点为特定主机名启用 Authenticated Origin Pulls。
如果您在第 2 步期间在源站上设置了日志记录,请测试并确认 Authenticated Origin Pulls 正常工作。
确认一切按预期为您的特定源站设置工作后,配置源站以强制执行认证。
Apache 示例
SSLVerifyClient requireNGINX 示例
ssl_verify_client on;完成此流程后,您可以使用 curl 直接向源站 IP 发送请求,验证请求因证书验证被强制执行而失败。
您可以配置告警以在 AOP 证书过期之前接收通知。
Hostname-level Authenticated Origin Pulls Certificate Expiration Alert
Who is it for?Customers that upload their own certificate to use with hostname-level Authenticated Origin Pull (AOP) to secure connections from Cloudflare to their origin server. AOP certificate expiration notifications are sent 30 days and 14 days before the certificate expiry.
Other options / filtersNone.
Included withAuthenticated Origin Pull.
What should you do if you receive one?Upload a renewed certificate to use for hostname-level AOP.
有关如何设置警报的更多信息,请参阅 Cloudflare Notifications。
有关更多选项,请参阅管理证书。
要了解如何移除配置,请参阅回滚。