本页说明如何管理非 Cloudflare CA 签发的客户端证书。更广泛的概述,请参阅 Cloudflare 上的 mTLS 学习路径。
自带 CA (BYOCA) 在您已实现 mTLS 且设备上已安装客户端证书 时特别有用。
- 此功能仅在 Enterprise 账户上可用。
- 每个 Enterprise 账户最多可上传五个 CA。此配额不适用于通过 Cloudflare Access 上传的 CA。
- CA 证书配额在 API Shield、Workers mTLS 和 Cloudflare Gateway 之间共享。
- 要提高此配额,请联系您的账户团队。
上传 CA 时,Cloudflare 会根据特定要求验证证书。
-
CA 证书可以来自公开受信任的 CA 或自签名。
-
在证书
Basic Constraints中,CA属性必须设置为TRUE。 -
证书必须使用以下列出的签名算法之一:
允许的签名算法
x509.SHA1WithRSAx509.SHA256WithRSAx509.SHA384WithRSAx509.SHA512WithRSAx509.ECDSAWithSHA1x509.ECDSAWithSHA256x509.ECDSAWithSHA384x509.ECDSAWithSHA512
-
在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。
Go to Client Certificates ↗ -
选择 Add Certificate(添加证书)。
-
在 Certificate Authority(证书颁发机构) 下拉菜单中,选择 Bring your own CA(自带 CA)。
-
上传您的 CA 证书文件(PEM 编码)并为 CA 输入名称。
-
选择 Continue(继续)。
-
在 Associate Hostnames(关联主机名) 页面上,输入应使用此 CA 进行 mTLS 验证的主机名,并为每个主机名选择 Add(添加)。您也可以跳过此步骤,稍后再关联主机名。
-
选择 Save(保存) 确认。
- 使用 Upload mTLS certificate 端点 上传 CA 根证书。
-
caboolean 必填- 设置为
true以指示该证书是 CA 证书。
- 设置为
-
certificatesstring 必填- 插入与 CA 证书关联的
.pem文件内容,格式为单个字符串,用\n替换换行符。
- 插入与 CA 证书关联的
-
namestring 可选- 为您的 CA 证书指定唯一名称。
-
private_keystring 可选- 插入与证书私钥关联的
.pem文件内容,格式为单个字符串,用\n替换换行符。
- 插入与证书私钥关联的
- 记下 API 响应中返回的证书 ID(
id)。 - 使用 Replace Hostname Associations 端点 在应使用该 CA 进行 mTLS 验证的每个主机名上启用 mTLS。使用以下参数:
-
hostnamesarray 必填-
列出将使用该 CA 进行客户端证书验证的主机名。
-
-
mtls_certificate_idstring 必填-
指明从上一步获得的证书 ID。
-
- (可选)发起 GET 请求 以确认 CA 主机名关联。
上传 CA 并关联主机名后,创建自定义规则以强制执行客户端证书验证。 您可以通过仪表板 或通过 API 完成此操作。
"expression": "(http.host in {\"<HOSTNAME_1>\" \"<HOSTNAME_2>\"} and not cf.tls_client_auth.cert_verified)",
"action": "block"同一主机名可以关联多个 CA(Cloudflare 托管或 BYOCA)。对于 BYOCA 证书,最近部署的证书将优先。
如果您希望移除与 Cloudflare 托管证书的关联,并仅使用您的 BYOCA 证书:
-
在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。
Go to Client Certificates ↗ -
在 Cloudflare-issued Client Certificates(Cloudflare 签发的客户端证书) 下的 Hosts(主机) 部分,选择 Edit(编辑)。
-
选择要移除的主机名旁边的叉号。
-
选择 Save(保存) 确认。
-
列出主机名关联,不带
mtls_certificate_id参数。
At least one of the following token permissions is required:Required API token permissions
SSL and Certificates WriteSSL and Certificates Read
List Hostname Associationsbash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
复制 API 返回的
hostnames数组并更新它,移除不应再使用 Cloudflare 托管 CA 的主机名。 -
使用 Replace Hostname Associations 端点,不带
mtls_certificate_id参数,以针对 Cloudflare 托管 CA 执行操作。对于hostnames,使用上一步的列表。
At least one of the following token permissions is required:Required API token permissions
SSL and Certificates Write
Replace Hostname Associationsbash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "hostnames": [ "<UPDATED_HOSTNAME_ASSOCIATIONS>" ] }'
如果要移除先前上传的 CA,必须先移除其所有主机名关联。
-
在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。
Go to Client Certificates ↗ -
选择 BYOCA(自带 CA) 选项卡。
-
找到要删除的 CA,并选择其旁边的三个点。
-
先移除所有关联的主机名(如有)。
-
选择删除选项并确认。
- 向 Replace Hostname Associations 端点 发起请求,将
hostnames设为空数组,并在mtls_certificate_id中指定您的 CA 证书 ID:
"hostnames": [],
"mtls_certificate_id": "<CERTIFICATE_ID>"- 使用 Delete mTLS certificate 端点 删除证书。
-
在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。
Go to Client Certificates ↗ -
选择 BYOCA(自带 CA) 选项卡。
-
找到要检查的 CA,并选择其旁边的三个点。
-
选择 Edit hostnames(编辑主机名)。Certificate Details(证书详情) 面板会显示关联的主机名。
使用 List Hostname Associations 端点,并将 mtls_certificate_id 查询参数设置为已上传 CA 的证书 ID。
Required API token permissions
At least one of the following token permissions is required:SSL and Certificates WriteSSL and Certificates Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/certificate_authorities/hostname_associations?mtls_certificate_id=ID_FROM_STEP_2" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"