Cloudflare 上的 HTTPS 涉及两个独立的连接:访问者到 Cloudflare,以及 Cloudflare 到您的源服务器。为了端到端的安全性,必须对两者进行加密。本指南将逐步引导您完成五个阶段:
- 配置您的 SSL/TLS 加密模式。
- 将所有 HTTP 请求重定向到 HTTPS。
- 使用最低 TLS 版本和 HSTS 来强化您的 HTTPS 设置。
- 监控页面上的第三方脚本。
- 验证您的配置。
核心工作流程在 Free、Pro 和 Business 计划上均可用。
您的 SSL/TLS 加密模式控制 Cloudflare 如何连接到您的源服务器。为了端到端加密,请使用 Full (strict)(完全(严格))——它会加密这两个连接并验证您的源证书。有关所有可用模式的详细比较,请参考 加密模式。
-
在 Cloudflare 仪表板中,转到 SSL/TLS Overview(SSL/TLS 概述) 页面。
Go to Overview ↗ -
检查页面上显示的当前加密模式。
- 如果模式已是 Full (strict)(完全(严格)),请跳至将所有 HTTP 请求重定向到 HTTPS。
- 如果模式不是 Full (strict)(完全(严格)),请继续在下面安装源证书(如果需要)并更改模式。
如果您的源服务器没有有效的 SSL 证书,请安装一个免费的 Cloudflare Origin CA 证书。Origin CA 证书的有效期最长为 15 年,并且受到 Cloudflare 的信任,这意味着在安装该证书后您可以将加密模式设置为“完全(严格)”。
如果您的源服务器已经有来自受信任公共证书颁发机构的有效证书,请跳至将加密模式设置为完全(严格)。
-
转到 Origin Server(源服务器) 页面。
Go to Origin Server ↗ -
在 Origin Certificates(源服务器证书) 选项卡上,选择 Create Certificate(创建证书)。
-
选择以下任一项:
- 通过 Cloudflare 生成私钥和 CSR:私钥类型可以是 RSA 或 ECC。
- 使用我自己的私钥和 CSR:将您的证书签名请求 (CSR) 粘贴到文本字段中。
-
列出应该通过 SSL 加密保护的主机名(包括通配符)。默认包含区域顶点和第一级通配符主机名。
-
选择一个 证书有效性 期限。
-
选择 Create(创建)。
-
选择 Key format(密钥格式):
- 使用 OpenSSL 的服务器(例如 Apache 和 NGINX)通常期望 PEM 文件(Base64 编码的 ASCII),但也适用于二进制 DER 文件。
- 使用 Windows 和 Apache Tomcat 的服务器需要 PKCS#7(
.p7b文件)。
-
将签名的 Origin Certificate(源服务器证书) 和 Private Key(私钥) 复制到单独的文件中。出于安全原因,您在退出此屏幕后无法看到 Private Key(私钥)。
-
选择 OK(确定)。
-
将 Origin CA 证书上传到您的源 Web 服务器。
-
更新您的 Web 服务器配置以使用该证书。有关特定于服务器的安装说明,请参考 Origin CA 证书。
-
(对于某些服务器是必需的)将 Cloudflare CA 根证书上传到您的源服务器。
-
在您的源 Web 服务器处启用 SSL 和端口
443。
在源服务器上安装了有效证书之后,请按照以下步骤将加密模式设置为 Full (strict)(完全(严格))。
要在仪表板中更改加密模式:
-
在 Cloudflare 仪表板中,前往 SSL/TLS Overview(SSL/TLS 概览) 页面。
Go to Overview ↗ -
选择一种加密模式。
要使用 API 调整加密模式,请发送 PATCH 请求,URI 路径中的设置名称为 ssl,value 参数设置为您所需的值(off、flexible、full、strict 或 origin_pull)。
即使具有活动的边缘证书,访问者仍然可以通过不安全的 HTTP 连接访问资源。有两个设置可以协同工作来解决这个问题:
- “始终使用 HTTPS”将 HTTP 请求重定向到 HTTPS
- “自动 HTTPS 重写”可修复页面 HTML 中的混合内容引用
“始终使用 HTTPS”会将所有 HTTP 请求在到达您的源站之前重定向到 HTTPS。
-
在 Cloudflare 仪表板中,转到 SSL/TLS Overview(SSL/TLS 概述) 页面。
Go to Overview ↗ -
确保您的 SSL/TLS 加密模式未设置为关闭。当加密模式为“关闭”时,仪表板中不可见“始终使用 HTTPS”选项。
-
转到 Edge Certificates(边缘证书) ↗ 页面。
-
开启 Always Use HTTPS(始终使用 HTTPS)。
-
确保您的 SSL/TLS 加密模式未设置为关闭。
-
发送一个
PATCH请求,URI 路径中的设置名称为always_use_https,value参数设置为"on"。
“自动 HTTPS 重写”通过将页面 HTML 中的 HTTP 资源 URL 重写为 HTTPS 来防止混合内容错误。这对于您无法控制所有资源 URL(例如 CMS 托管的内容或嵌入的第三方资源)的网站很有用。
-
在 Cloudflare 仪表板中,转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
对于 Automatic HTTPS Rewrites(自动 HTTPS 重写),将开关切换为 开启。
发送一个 PATCH 请求,URI 路径中的设置名称为 automatic_https_rewrites,value 参数设置为 "on"。
在设置了加密模式并重定向 HTTP 流量后,通过设置最低 TLS 版本、开启 HTTP 严格传输安全 (HSTS) 以及开启 TLS 1.3 来强化您的配置。
TLS 1.0 和 1.1 存在已知漏洞,不再被认为是安全的。将最低 TLS 版本设置为 1.2 可阻止来自使用较旧协议客户端的连接。有关选择哪个版本的指导,请参考 TLS 协议。
-
在 Cloudflare 仪表板中,转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
对于 Minimum TLS Version(最低 TLS 版本),选择 TLS 1.2。
发送一个 PATCH 请求,URI 路径中的设置名称为 min_tls_version,value 参数设置为 "1.2"。
与 TLS 1.2 相比,TLS 1.3 提供了更快的握手和更佳的安全性。
-
在 Cloudflare 仪表板中,转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
对于 TLS 1.3,将开关切换为 开启。
发送一个 PATCH 请求,URI 路径中的设置名称为 tls_1_3,value 参数设置为 "on"。若还要开启 0-RTT(零往返时间恢复),请将值设置为 "zrt"。
HTTP 严格传输安全 (HSTS) 会添加一个响应标头,告知浏览器仅通过 HTTPS 连接到您的网站,即使某个链接或重定向试图通过 HTTP 发送它们。HSTS 可防止协议降级攻击。
在开启 HSTS 之前,请确认这些先决条件:
- HTTPS 已启用并在您的域上运行。
- 您的 DNS 记录设置为 已代理。
- 您未在任何地方将 HTTPS 重定向到 HTTP。
-
在 Cloudflare 仪表板中,转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
对于 HTTP 严格传输安全 (HSTS),选择 Enable HSTS(启用 HSTS)。
-
阅读对话框并选择 I understand(我明白)。
-
选择 Next(下一步)。
-
配置 HSTS 设置:
- Max Age 标头:选择一个持续时间(从 6 个月开始,在确认稳定性后增加到 12 个月)。
- includeSubDomains(将 HSTS 策略应用于子域):如果您的所有子域都支持 HTTPS,则开启。当此功能启用时,不支持 HTTPS 的子域将无法访问。
- 预加载:仅在将 Max Age 标头设置为 12 个月后才开启。预加载包含可防止首次访问时发生降级攻击。开启预加载后,请在 hstspreload.org ↗ 提交您的域。
- No-Sniff 标头:发送
X-Content-Type-Options: nosniff标头。开启此选项以防止浏览器进行 MIME 类型嗅探。
-
选择 Save(保存)。
发送一个 PATCH 请求,URI 路径中的设置名称为 security_header,并指定包含 HSTS 设置的 value 对象。
Cloudflare 的默认密码套件可为大多数网站提供强加密。除非安全审计或合规要求指定了特定的密码配置,否则您无需更改它们。
有关默认密码套件以及如何自定义的详细信息,请参阅 密码套件。有关特定于合规性的密码配置,请参阅 通过 API 自定义密码套件。
HTTPS 加密传输过程中的数据,但是您页面加载的第三方脚本仍然可能从浏览器中泄露数据。客户端安全性会监控这些脚本并针对任何意料外的增加对您进行提醒。
-
在 Cloudflare 仪表板中,转到 Security Settings(安全设置) 页面。
Go to Settings ↗ -
(可选)依 Client-side abuse(客户端滥用) 进行过滤。
-
开启 Continuous script monitoring(持续脚本监控)。
开启监控后,Cloudflare 可能需要一些时间才能生成在您的域上检测到的脚本的列表。
-
在 Cloudflare 仪表板中,转到 Web assets(Web 资产) 页面。
Go to Web assets ↗ -
选择 Client-side resources(客户端资源) 选项卡。
-
检查检测到的脚本列表。寻找不认识或意料之外的来自不认识域的脚本。
根据您的 Cloudflare 计划,您还可能能够检查由脚本建立的连接并查验其是否有恶意活动。有关设置的详情,请参考 客户端安全性入门。
完成前面的步骤后,请验证您的 HTTPS 配置是否如预期那样运作。
Cloudflare 的自动 SSL/TLS 会分析您的源服务器,并选择源站支持的最安全的加密模式。如果您的区域使用自动 SSL/TLS(新区域的默认设置),Cloudflare 将自动调整模式,并且在您的源证书过期时不会降级至安全性较低的模式。
要检查您的区域是否使用了自动 SSL/TLS:
-
在 Cloudflare 仪表板中,转到 SSL/TLS Overview(SSL/TLS 概述) 页面。
Go to Overview ↗ -
检查选中的是 Automatic SSL/TLS(自动 SSL/TLS) 还是 Custom SSL/TLS(自定义 SSL/TLS)。如果选择了“自定义”,并且您希望 Cloudflare 自动管理模式,请选择 Automatic SSL/TLS(自动 SSL/TLS)。
使用 SSL Labs Server Test ↗ 从 Cloudflare 网络外部验证您的 HTTPS 配置。输入您的域名并查看报告。如果评级为 A 或 A+,则表明您的 TLS 配置、证书链和协议支持满足当前的安全标准。
要测试支持的 TLS 版本,请在指定 TLS 版本的情况下向您的网站或应用程序发起请求。
例如,要测试 TLS 1.1,请使用以下 curl 命令。将 www.example.com 替换为您的 Cloudflare 域名和主机名。
curl https://www.example.com -svo /dev/null --tls-max 1.1若 Cloudflare 阻止了您正在测试的 TLS 版本,TLS 握手将无法完成并返回错误:
* error:1400442E:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alert
SSL/TLS
- SSL/TLS 入门 — 边缘证书、加密模式和 HTTPS 强制的入门指南
- 加密模式 — 详细解释关闭、灵活、完全和完全(严格)模式
- Cloudflare Origin CA — 创建受 Cloudflare 信任的免费源证书
- 混合内容错误 — 对 HTTPS 页面上加载的 HTTP 资源进行故障排除
- ERR_TOO_MANY_REDIRECTS — 修复由加密模式配置错误导致的重定向循环
客户端安全
- 客户端安全性入门 — 激活监控、查看脚本、配置警报并创建规则
- 客户端安全性与 PCI DSS 合规性 — 客户端安全性如何映射到 PCI DSS v4 要求