如何在 Cloudflare 后台配置自定义 SSL 证书加密模式

文章导读
在 Cloudflare 配置自定义 SSL 证书与加密模式时,核心在于区分边缘证书(用户看到的)与源站加密模式(Cloudflare 到源站的连接)。开启 Full (Strict) 模式不需要向 Cloudflare 上传源站私钥,私钥应仅保留在源站服务器。
📋 目录
  1. 核心概念:边缘证书与加密模式
  2. 第一步:源站服务器 SSL 配置
  3. 第二步:Cloudflare 加密模式选择
  4. 第三步:(可选)上传自定义边缘证书
  5. 验证与故障排查
  6. 常见风险与坑
  7. 参考来源
A A

在 Cloudflare 配置自定义 SSL 证书与加密模式时,核心在于区分边缘证书(用户看到的)源站加密模式(Cloudflare 到源站的连接)。开启 Full (Strict) 模式不需要向 Cloudflare 上传源站私钥,私钥应仅保留在源站服务器。

先说结论:自定义证书配置分为两部分:源站部署证书决定加密模式可用性,边缘证书上传决定用户看到的证书信息。

  • 加密模式:取决于源站服务器是否部署了有效证书,而非 Cloudflare 后台是否上传了证书。
  • Full (Strict):要求源站证书由可信 CA 签发,私钥无需上传至 Cloudflare。
  • 自定义边缘证书:若需展示特定组织信息或泛域名,需在“边缘证书”页面上传,但此操作不影响源站加密模式选择。
  • 验证:使用 openssl 命令排查握手问题,避免重定向循环。

核心概念:边缘证书与加密模式

很多配置错误源于混淆了两个独立概念:

  • SSL/TLS 加密模式(Overview):控制 Cloudflare 到源站服务器的连接安全性。Full (Strict) 模式要求源站必须配置有效公网证书,Cloudflare 会验证源站证书合法性。
  • 边缘证书(Edge Certificates):控制用户浏览器到 Cloudflare 之间显示的证书。默认使用 Universal SSL,若需自定义主体名称或泛域名支持,可在此上传自定义证书。

注意:开启 Full (Strict) 模式不需要在 Cloudflare 后台“源服务器”页面上传私钥。该页面通常用于 mTLS(双向认证),普通业务上传私钥会增加密钥泄露风险。

第一步:源站服务器 SSL 配置

无论是否使用 Cloudflare 自定义边缘证书,源站必须正确配置 SSL 才能启用 Full 或 Full (Strict) 模式。以下是常见 Web 服务器配置示例。

Nginx 配置示例

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://localhost:80;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Apache 配置示例

<VirtualHost *:443>
    ServerName yourdomain.com
    SSLEngine on
    SSLCertificateFile /path/to/fullchain.pem
    SSLCertificateKeyFile /path/to/privkey.pem

    <Directory /var/www/html>
        Require all granted
    </Directory>
</VirtualHost>

配置完成后,重启 Web 服务器并确认 443 端口监听正常:

sudo systemctl restart nginx
sudo netstat -tulpn | grep 443

第二步:Cloudflare 加密模式选择

源站配置无误后,登录 Cloudflare Dashboard 进行模式调整:

  1. 进入 SSL/TLS > 概述 页面。
  2. Full:适合源站使用自签名证书或过期证书的场景。Cloudflare 会加密连接但不验证源站证书有效性。
  3. Full (Strict):推荐生产环境使用。源站必须使用可信 CA 签发的有效证书(如 Let's Encrypt)。Cloudflare 会验证源站证书链。
  4. 保存设置,等待状态变为 Active。

注意:若源站未配置 SSL 直接选 Full 模式,Cloudflare 到源站连接会失败。若源站强制 HTTPS 但 Cloudflare 选 Flexible 模式,会导致重定向循环。

第三步:(可选)上传自定义边缘证书

若默认 Universal SSL 无法满足需求(如需要显示特定公司名称或支持未覆盖的泛域名),可上传自定义边缘证书。此步骤不影响加密模式选择,仅改变用户看到的证书。

如何在 Cloudflare 后台配置自定义 SSL 证书加密模式
  1. 进入 SSL/TLS > 边缘证书 页面。
  2. 点击上传自定义证书
  3. 粘贴公钥证书(PEM 格式)和私钥。此处上传私钥是必要的,因为这是 Cloudflare 边缘节点使用的证书。
  4. 设置主机名并保存。

安全提示:此处上传的私钥仅用于边缘节点终止 SSL 连接,源站私钥仍应保留在本地,不要混淆。

验证与故障排查

配置完成后,需通过以下方法验证生效情况及排查潜在问题。

1. 浏览器验证

访问 https://yourdomain.com,点击地址栏锁图标:

  • 确认颁发者是否为预期(Cloudflare 或自定义证书机构)。
  • 确认连接安全,无混合内容警告。

2. 命令行验证

使用 curl 检查响应头及 SSL 握手:

curl -vI https://yourdomain.com

观察输出中 SSL certificate verify okserver: cloudflare 标识。

3. 源站连接排查(Full Strict 失败时)

若 Full (Strict) 模式显示错误 526,通常意味着 Cloudflare 无法验证源站证书。可在本地使用 openssl 模拟 Cloudflare 验证源站:

openssl s_client -connect your_origin_ip:443 -servername yourdomain.com

检查输出中 Verify return code: 0 (ok)。若返回错误码,检查源站证书是否过期、是否缺少中间证书或域名不匹配。

常见风险与坑

  • 重定向循环(Error 526/525):源站强制 HTTPS 重定向,但 Cloudflare 模式为 Flexible。解决方法:源站取消强制重定向或 Cloudflare 改为 Full/Full (Strict)。
  • 源站私钥泄露风险:切勿将源站私钥上传至 Cloudflare“源服务器”页面(除非配置 mTLS)。自定义边缘证书私钥上传至“边缘证书”页面是标准流程,但需确保传输通道安全。
  • 证书过期监控:自定义边缘证书 Cloudflare 不会自动续期。需设置监控告警,在过期前上传新证书,否则用户访问会报 SSL 错误。
  • 中间证书缺失:源站配置 Full (Strict) 时,必须提供完整的证书链(包含中间证书),否则 Cloudflare 验证会失败。

参考来源

  • Cloudflare Documentation, SSL/TLS encryption modes, https://developers.cloudflare.com/ssl/origin-configuration/ssl-tls-encryption-modes/
  • Cloudflare Documentation, Upload custom SSL certificates, https://developers.cloudflare.com/ssl/origin-configuration/custom-certificates/