Cloudflare SSL/TLS 证书与安全头
上一篇讲加密模式时提到,Full (strict) 模式要求源站有一张被信任的证书。证书从哪来、装在哪、怎么续期,以及除了证书之外还能开哪些安全响应头,是这一篇的主题。把这几项配好,HTTPS 才算真正完整。
两类证书
Cloudflare 在 HTTPS 链路里用到两类证书,分别管两段路。
| 证书类型 | 服务对象 | 签发方 |
|---|---|---|
| 边缘证书 | 用户浏览器到 Cloudflare | Cloudflare 或公共 CA |
| 源站证书 | Cloudflare 到源站 | Cloudflare Origin CA 或公共 CA |
边缘证书是用户在浏览器点小锁时看到的,必须由公共 CA 签发才能被浏览器信任。源站证书只在 Cloudflare 和源站之间用,不需要公共 CA,可以用 Cloudflare 自己签发的 Origin CA 证书。
边缘证书
接入 Cloudflare 后,平台会自动为你的域名申请一张 Universal SSL 证书,覆盖主域名和一级子域名,例如 example.com 和 www.example.com。这张证书由公共 CA 签发,浏览器默认信任,不需要你做任何事。
| 项目 | 说明 |
|---|---|
| 名称 | Universal SSL |
| 费用 | 免费 |
| 覆盖范围 | 主域名加一级通配符,例如 *.example.com |
| 生效时间 | 几分钟到 24 小时 |
| 续期 | Cloudflare 自动续期 |
如果需要覆盖更深层的子域名,例如 api.staging.example.com,免费 Universal SSL 不够用,需要另外付费购买 Advanced Certificate Manager 或签发专用的边缘证书。绝大多数个人项目和中小企业用 Universal SSL 就够了。
源站证书
源站证书管 Cloudflare 到源站这段。最方便的方式是用 Cloudflare Origin CA 免费签发,最长有效期 15 年,省去续期麻烦。
在 SSL/TLS 分区进入 Origin Server,点击 Create Certificate,选择主机名和有效期,生成后会得到证书和私钥两段内容。
| 字段 | 说明 |
|---|---|
| Hostnames | 源站域名,例如 example.com, *.example.com |
| 有效期 | 最长 15 年 |
| 算法 | RSA 或 ECDSA |
| 用途 | 仅限 Cloudflare 到源站,不能用于浏览器 |
生成的证书和私钥要保存好。把证书放到源站服务器的证书目录,例如 Nginx 的配置路径,然后启用 HTTPS。配置完成后,把 SSL/TLS 加密模式切到 Full (strict),Cloudflare 会用这张证书与源站建立加密连接。
Nginx 配置示例
源站是 Nginx 时,把证书和私钥放到指定路径,配置文件里这样写。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/cloudflare/origin.pem;
ssl_certificate_key /etc/ssl/cloudflare/origin.key;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
配置后用 curl -v https://example.com 测试握手是否成功,能看到 TLS 协商完成即说明证书装好了。
Always Use HTTPS
开了 HTTPS 还不够,用户如果输入 http://example.com 默认还是走明文。Always Use HTTPS 这个开关会把所有 HTTP 请求 301 跳转到 HTTPS。
| 项目 | 说明 |
|---|---|
| 位置 | SSL/TLS 分区 Edge Certificates 下 |
| 效果 | HTTP 请求 301 跳转到 HTTPS |
| 费用 | 免费 |
| 建议 | 生产环境默认开启 |
开启后用户访问 http://example.com/foo 会自动跳到 https://example.com/foo,全程不出现明文。这是把站点彻底切到 HTTPS 的最后一公里,建议默认开。
HSTS
HSTS(HTTP Strict Transport Security,严格传输安全)是一个响应头,告诉浏览器这个域名在未来一段时间内必须用 HTTPS 访问,即使用户输入 HTTP 也直接由浏览器本地跳转,不再依赖服务器 301。
| 配置项 | 含义 |
|---|---|
| max-age | HSTS 有效期,单位秒,推荐至少半年 |
| includeSubDomains | 是否覆盖所有子域名 |
| preload | 是否加入浏览器内置的 HSTS 预加载列表 |
Cloudflare 控制台提供 HSTS 的开关,可以选 1 个月、半年、1 年等档位。开启前要确认全站 HTTPS 已经稳定,否则一旦某个子域名还跑 HTTP,用户会被浏览器拒访。
| 注意点 | 说明 |
|---|---|
| 开启前确认全站 HTTPS | 包括所有子域名 |
| max-age 从短到长 | 先 1 个月观察,再调到 1 年 |
| preload 加入需谨慎 | 加入后撤销很慢,确认稳定再申请 |
最低 TLS 版本
TLS 协议有多个版本,越新越安全。老版本 TLS 1.0、TLS 1.1 已被废弃,存在已知漏洞。最低 TLS 版本这个设置控制 Cloudflare 接受的下限。
| 选项 | 说明 |
|---|---|
| TLS 1.0 | 已废弃,不建议 |
| TLS 1.1 | 已废弃,不建议 |
| TLS 1.2 | 主流兼容,最低推荐 |
| TLS 1.3 | 最新,更快更安全,现代浏览器都支持 |
推荐设置为 TLS 1.2。这样老设备仍能访问,但 TLS 1.0 和 1.1 这类不安全协议被拒之门外。如果用户群体都是现代浏览器,直接选 TLS 1.3 更好。
其他安全响应头
除了 HSTS,Cloudflare 还能在边缘添加几个常用的安全响应头,开启即生效,无需改源站代码。
| 响应头 | 作用 |
|---|---|
| X-Content-Type-Options | 禁止浏览器猜测 MIME 类型,防 XSS |
| X-Frame-Options | 控制页面能否被 iframe 嵌套,防点击劫持 |
| Referrer-Policy | 控制 Referer 头泄露程度 |
| Content-Security-Policy | 内容安全策略,限制资源加载来源 |
前三个在 SSL/TLS 分区的 Settings 里有开关。CSP 比较复杂,需要根据站点实际加载的资源定制,建议后续单独研究。本篇只先建立认识,知道这些头的存在和作用。
小结
边缘证书由 Cloudflare 自动签发免费可用,源站证书推荐用 Cloudflare Origin CA 签发 15 年长期证书。Always Use HTTPS 和 HSTS 把 HTTP 流量彻底收口到 HTTPS。最低 TLS 版本建议设为 1.2 或 1.3。把这些项配齐,HTTPS 这一环就完整了,本教程的基础模块也到此结束。