跳转到内容
搜索文档

为 mTLS 自带 CA

最后更新 查看 MarkdownAgent 设置

本页说明如何管理非 Cloudflare CA 签发的客户端证书。更广泛的概述,请参阅 Cloudflare 上的 mTLS 学习路径

自带 CA (BYOCA) 在您已实现 mTLS 且设备上已安装客户端证书 时特别有用。

可用性

  • 此功能仅在 Enterprise 账户上可用。
  • 每个 Enterprise 账户最多可上传五个 CA。此配额不适用于通过 Cloudflare Access 上传的 CA。
  • CA 证书配额在 API ShieldWorkers mTLSCloudflare Gateway 之间共享。
  • 要提高此配额,请联系您的账户团队。

CA 证书要求

上传 CA 时,Cloudflare 会根据特定要求验证证书。

  • CA 证书可以来自公开受信任的 CA 或自签名。

  • 在证书 Basic Constraints 中,CA 属性必须设置为 TRUE

  • 证书必须使用以下列出的签名算法之一:

    允许的签名算法

    x509.SHA1WithRSA

    x509.SHA256WithRSA

    x509.SHA384WithRSA

    x509.SHA512WithRSA

    x509.ECDSAWithSHA1

    x509.ECDSAWithSHA256

    x509.ECDSAWithSHA384

    x509.ECDSAWithSHA512

使用您的 CA 设置 mTLS

  1. 在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。

    Go to Client Certificates ↗
  2. 选择 Add Certificate(添加证书)

  3. Certificate Authority(证书颁发机构) 下拉菜单中,选择 Bring your own CA(自带 CA)

  4. 上传您的 CA 证书文件(PEM 编码)并为 CA 输入名称。

  5. 选择 Continue(继续)

  6. Associate Hostnames(关联主机名) 页面上,输入应使用此 CA 进行 mTLS 验证的主机名,并为每个主机名选择 Add(添加)。您也可以跳过此步骤,稍后再关联主机名。

  7. 选择 Save(保存) 确认。

  1. 使用 Upload mTLS certificate 端点 上传 CA 根证书。
  • ca boolean 必填

    • 设置为 true 以指示该证书是 CA 证书。
  • certificates string 必填

    • 插入与 CA 证书关联的 .pem 文件内容,格式为单个字符串,用 \n 替换换行符。
  • name string 可选

    • 为您的 CA 证书指定唯一名称。
  • private_key string 可选

    • 插入与证书私钥关联的 .pem 文件内容,格式为单个字符串,用 \n 替换换行符。
  1. 记下 API 响应中返回的证书 ID(id)。
  2. 使用 Replace Hostname Associations 端点 在应使用该 CA 进行 mTLS 验证的每个主机名上启用 mTLS。使用以下参数:
  • hostnames array 必填

    • 列出将使用该 CA 进行客户端证书验证的主机名。

  • mtls_certificate_id string 必填

    • 指明从上一步获得的证书 ID。

  1. (可选)发起 GET 请求 以确认 CA 主机名关联。

上传 CA 并关联主机名后,创建自定义规则以强制执行客户端证书验证。 您可以通过仪表板通过 API 完成此操作。

  "expression": "(http.host in {\"<HOSTNAME_1>\" \"<HOSTNAME_2>\"} and not cf.tls_client_auth.cert_verified)",
  "action": "block"

一个主机名对应多个 CA

同一主机名可以关联多个 CA(Cloudflare 托管或 BYOCA)。对于 BYOCA 证书,最近部署的证书将优先。

如果您希望移除与 Cloudflare 托管证书的关联,并仅使用您的 BYOCA 证书:

  1. 在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。

    Go to Client Certificates ↗
  2. Cloudflare-issued Client Certificates(Cloudflare 签发的客户端证书) 下的 Hosts(主机) 部分,选择 Edit(编辑)

  3. 选择要移除的主机名旁边的叉号。

  4. 选择 Save(保存) 确认。

  1. 列出主机名关联mtls_certificate_id 参数。

    Required API token permissions

    At least one of the following token permissions is required:
    • SSL and Certificates Write
    • SSL 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"
  2. 复制 API 返回的 hostnames 数组并更新它,移除不应再使用 Cloudflare 托管 CA 的主机名。

  3. 使用 Replace Hostname Associations 端点mtls_certificate_id 参数,以针对 Cloudflare 托管 CA 执行操作。对于 hostnames,使用上一步的列表。

    Required API token permissions

    At least one of the following token permissions is required:
    • 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

如果要移除先前上传的 CA,必须先移除其所有主机名关联。

  1. 在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。

    Go to Client Certificates ↗
  2. 选择 BYOCA(自带 CA) 选项卡。

  3. 找到要删除的 CA,并选择其旁边的三个点。

  4. 先移除所有关联的主机名(如有)。

  5. 选择删除选项并确认。

  1. Replace Hostname Associations 端点 发起请求,将 hostnames 设为空数组,并在 mtls_certificate_id 中指定您的 CA 证书 ID:
  "hostnames": [],
  "mtls_certificate_id": "<CERTIFICATE_ID>"
  1. 使用 Delete mTLS certificate 端点 删除证书。

列出 CA 主机名关联

  1. 在 Cloudflare 仪表板中,前往 Client Certificates(客户端证书) 页面。

    Go to Client Certificates ↗
  2. 选择 BYOCA(自带 CA) 选项卡。

  3. 找到要检查的 CA,并选择其旁边的三个点。

  4. 选择 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 Write
  • SSL and Certificates Read
List Hostname Associationsbash
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"

这篇文档对您有帮助吗?