六维教程

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.comwww.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 这一环就完整了,本教程的基础模块也到此结束。

上一篇 Cloudflare SSL/TLS 加密模式

上一篇
Cloudflare SSL/TLS 加密模式