本页列出 Cloudflare 对自定义证书的要求,并说明如何使用 Cloudflare 仪表板或 API 上传和更新这些证书。
在接受自定义证书之前,Cloudflare 会解析证书并根据一系列要求检查其有效性。
完整要求列表
您上传的每个自定义证书必须:
- 使用 PEM 格式编码(PEM、PKCS#7 或 PKCS#12)。转换示例请参阅 Converting Using OpenSSL ↗。
- 没有密钥文件密码。
- 距上传时间不少于 14 天到期。
- 具有 subject alternative name (SAN),匹配上传所在 zone 中至少一个主机名。
- 使用长度大于或等于最小值的私钥。目前 RSA 为 2048 位,ECDSA 为 225 位。
- 被主流浏览器公开信任。这不适用于将
User Defined指定为 bundle 方法 的证书。 - 是以下证书类型之一:
- Unified Communications Certificates (UCC)
- Extended Validation (EV)
- Domain Validated (DV)
- Organization Validated (OV)
要在仪表板中上传自定义 SSL 证书:
-
在 Cloudflare 仪表板中,前往 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
在 Edge Certificates(边缘证书) 中,选择 Upload Custom SSL Certificate(上传自定义 SSL 证书)。
-
将相关值复制并粘贴到 SSL Certificate(SSL 证书) 和 Private key(私钥) 文本区域(或选择 Paste from file(从文件粘贴))。
-
选择适当的 Bundle Method(捆绑方法)。
-
为 Private Key Restriction(私钥限制) 选择一个值。
为 Legacy Client Support(旧版客户端支持) 选择一个值,该值指定 Server Name Indication (SNI) 支持:
-
Modern (recommended)(现代(推荐)):仅 SNI
-
Legacy(旧版):支持非 SNI
-
-
选择 Upload Custom Certificate(上传自定义证书)。如果您看到
The key you provided does not match the certificate错误,请联系您的证书颁发机构以确保私钥与证书匹配。 -
(可选)添加 CAA DNS 记录。
以下调用将为 app.example.com 上传证书。Cloudflare 将自动将证书与针对浏览器最大兼容性优化的证书链捆绑。
- 更新文件并构建 payload
cat app_example_com.pem-----BEGIN CERTIFICATE-----
MIIFJDCCBAygAwIBAgIQD0ifmj/Yi5NP/2gdUySbfzANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
...
SzSHfXp5lnu/3V08I72q1QNzOCgY1XeL4GKVcj4or6cT6tX6oJH7ePPmfrBfqI/O
OeH8gMJ+FuwtXYEPa4hBf38M5eU5xWG7
-----END CERTIFICATE-----MYCERT="$(cat app_example_com.pem|perl -pe 's/\r?\n/\\n/'|sed -e 's/..$//')"
MYKEY="$(cat app_example_com.key|perl -pe 's/\r?\n/\\n/'|sed -e's/..$//')"将证书和密钥保存到环境变量(使用转义换行符)后,构建 payload:
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method": "ubiquitous"
}
EOF
))您可以选择添加地理限制 ↗,指定私钥可以在哪些物理位置解密:
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method": "ubiquitous",
"geo_restrictions": {"label": "us"}'
}
EOF
))您还可以启用对 TLS 握手中不包含 SNI 的旧版客户端的支持。
request_body=$(< <(cat <<EOF
{
"certificate": "$MYCERT",
"private_key": "$MYKEY",
"bundle_method": "ubiquitous",
"geo_restrictions": {"label": "us"}',
"type":"sni_custom"
}
EOF
))Cloudflare 推荐使用 sni_custom。当特定客户端需要非 SNI 支持时使用 legacy_custom。Cloudflare API 默认将所有 Custom SSL 证书视为 Legacy。
- 上传证书和密钥
使用 POST 端点上传证书和密钥。
curl https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_certificates \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>" \
--header "Content-Type: application/json" \
--data "$request_body"- (可选)添加 CAA 记录。
证书颁发机构授权(CAA)DNS 记录指定哪些证书颁发机构(CA)可以为域名签发证书。此记录降低了未经授权的证书签发的可能性,并促进组织内的标准化。
更多指导请参阅创建 CAA 记录。
要续订即将到期的自定义证书,或使用更新的密钥材料替换证书,请按照以下步骤操作。这是推荐的续订路径 — 它不会消耗额外的证书配额槽位,且避免停机。
在更新现有自定义证书之前,您可能希望激活 Universal 或 Advanced 证书作为后备选项。前往 Edge Certificates(边缘证书) ↗ 页面查看 zone 中主机名列表和边缘证书状态。
如果您使用 Enterprise 计划并想更新自定义 (modern) 证书,还可以考虑申请 Staging environment (Beta) 访问权限。
按照这些步骤替换自定义证书不会导致任何停机。现有连接不会被终止,新连接将使用新证书。旧证书仅在新证书上传并激活后才会被实际删除。
要在仪表板中更新证书:
-
在 Cloudflare 仪表板中,前往 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
在 Edge Certificates(边缘证书) 中,找到自定义证书并选择展开。
-
选择扳手按钮并选择 Replace SSL certificate and key(替换 SSL 证书和密钥)。
-
按照与上传新证书相同的步骤操作。
要使用 API 更新证书,请发送 PATCH 命令。
-
在 Cloudflare 仪表板中,前往 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
在 Edge Certificates(边缘证书) 中,找到自定义证书并选择展开。
-
选择叉号按钮。
-
选择 Confirm(确认) 删除证书。