游客发表
Cloudflare 的安装免费 CDN 和 DNS 服务很香,但它的证书至服 Origin 证书(源站证书)有个坑——默认有效期只有 15 年,而且只对 Cloudflare 的安装代理流量加密。你要是证书至服直接通过 IP 访问源站,浏览器照样报“不安全”。安装所以正确姿势是证书至服把 Cloudflare 签发的证书装到你的 Nginx 或 Apache 服务器上,让源站和 Cloudflare 之间的安装回源链路也走 TLS。
先讲最关键的证书至服:别去 Cloudflare 后台下载那个 15 年的 Origin 证书,那个证书的安装私钥是 Cloudflare 生成的,你装到自己服务器上等于把私钥暴露给第三方。证书至服正确做法是安装去 SSL/TLS → Origin Server 页面,点 Create Certificate,证书至服选“Let Encrypt”那个选项。安装Cloudflare 会给你一个 90 天有效期的证书至服证书,私钥是安装现场生成的,只显示一次,务必立刻复制保存。别问为什么不是 15 年,因为 Cloudflare 官方文档明确说,长期证书仅用于 Cloudflare 边缘节点之间的通信,你源站用短期证书反而更安全。
拿到证书和私钥后,把内容分别存成 cloudflare.pem 和 cloudflare.key。注意私钥文件权限必须设为 600,否则 Nginx 启动时会报错“permissions too open”。我见过不少新手直接 777 权限,结果服务起不来,还以为是证书格式问题。
接着改 Nginx 配置。在 server 块里加两行:
listen 443 ssl; ssl_certificate /etc/ssl/cloudflare.pem; ssl_certificate_key /etc/ssl/cloudflare.key; 如果你用的是 Apache,对应的是 SSLCertificateFile 和 SSLCertificateKeyFile。改完重启服务,用 curl -I https://你的域名 测试,看到 HTTP/2 200 就说明证书装好了。
但有个细节很多人忽略——Cloudflare 边缘节点回源时,默认走 443 端口,但如果你源站只开了 80 端口,回源流量还是明文。所以你得在 Cloudflare 后台的 SSL/TLS → Edge Certificates 里把“SSL/TLS 加密模式”改成“Full (strict)”,这样回源强制走 HTTPS,且会校验源站证书。改完后,源站日志里应该能看到来自 Cloudflare 的请求都是 HTTPS/1.1 或 HTTP/2 协议。
最后提醒一句:Let Encrypt 的证书每 90 天要续期。Cloudflare 不会帮你自动续,你得写个 cron 脚本,每 60 天去 API 拉新证书并重载 Nginx。手动续也不是不行,但漏了会导致源站证书过期,用户访问时浏览器直接拦死。我建议用 acme.sh 脚本,配置好 Cloudflare API token 后,全自动续期,省心。
装完证书后,用浏览器无痕模式访问你的域名,地址栏应该出现小锁图标。如果还是显示“不安全”,先检查是不是回源模式没切到 Full (strict),或者源站防火墙没放行 443 端口。别问我怎么知道的——我上次就是忘了改防火墙规则,排查了半小时。
友情链接