SSL/TLS 配置
SSL/TLS 是网站安全的基础,为数据传输提供加密保护。Cloudflare 提供免费的 SSL 证书,支持多种加密模式,让网站轻松实现 HTTPS。
SSL/TLS 基础知识
什么是 SSL/TLS?
SSL(Secure Sockets Layer)和 TLS(Transport Layer Security)是加密协议,用于在网络上安全传输数据。TLS 是 SSL 的升级版本,目前广泛使用的是 TLS 1.2 和 TLS 1.3。
HTTPS 的工作原理
HTTPS 在 HTTP 和 TCP 之间添加了 TLS 层:
应用层 HTTP
↓
安全层 TLS/SSL(加密/解密)
↓
传输层 TCP
↓
网络层 IP
HTTPS 提供的保护:
- 加密:数据传输过程中被加密,防止窃听
- 认证:验证服务器身份,防止中间人攻击
- 完整性:确保数据在传输过程中不被篡改
Cloudflare SSL 的优势
免费证书:Cloudflare 提供免费的 SSL 证书,无需购买。
自动管理:证书自动签发、续期,无需手动维护。
通用证书:一张证书覆盖所有子域名。
多种模式:支持不同的加密模式,适应各种场景。
加密模式详解
Cloudflare 提供四种 SSL 加密模式,在 "SSL/TLS" → "Overview" 中配置:
Flexible(灵活模式)
用户 ────HTTPS────▶ Cloudflare ────HTTP────▶ 源服务器
特点:
- 用户到 Cloudflare:HTTPS 加密
- Cloudflare 到源服务器:HTTP 明文
适用场景:
- 源服务器没有 SSL 证书
- 快速启用 HTTPS
- 测试环境
安全风险:Cloudflare 到源服务器的连接不加密,存在被窃听的风险。
Full(完全模式)
用户 ────HTTPS────▶ Cloudflare ────HTTPS────▶ 源服务器
特点:
- 用户到 Cloudflare:HTTPS 加密
- Cloudflare 到源服务器:HTTPS 加密
- 不验证源服务器证书
适用场景:
- 源服务器有自签名证书
- 源服务器证书过期或无效
- 内部测试环境
安全风险:不验证证书,可能存在中间人攻击风险。
Full (Strict)(完全严格模式)
用户 ────HTTPS────▶ Cloudflare ────HTTPS────▶ 源服务器
验证有效证书
特点:
- 用户到 Cloudflare:HTTPS 加密
- Cloudflare 到源服务器:HTTPS 加密
- 验证源服务器证书有效性
适用场景:
- 生产环境(推荐)
- 源服务器有有效证书
安全优势:最安全的模式,提供端到端加密和证书验证。
Strict(严格模式)
与 Full (Strict) 类似,但要求所有请求都使用 HTTPS。
推荐配置
场景一:源服务器无证书
使用 Flexible 模式,快速启用 HTTPS。
配置步骤:
- 进入 "SSL/TLS" → "Overview"
- 选择 "Flexible"
- 等待几分钟生效
后续优化:建议为源服务器配置证书,然后升级到 Full (Strict)。
场景二:源服务器有自签名证书
使用 Full 模式。
配置步骤:
- 确保源服务器配置了 SSL 证书(可以是自签名)
- 在 Cloudflare 选择 "Full" 模式
场景三:源服务器有有效证书(推荐)
使用 Full (Strict) 模式。
配置步骤:
- 确保源服务器有有效的 SSL 证书(Let's Encrypt、DigiCert 等)
- 在 Cloudflare 选择 "Full (Strict)" 模式
始终使用 HTTPS
启用后,所有 HTTP 请求都会被重定向到 HTTPS:
SSL/TLS → Edge Certificates → Always Use HTTPS
效果:
- 用户访问
http://example.com自动跳转到https://example.com - 提升安全性,防止降级攻击
建议:始终开启此功能。
HSTS 配置
HSTS(HTTP Strict Transport Security)告诉浏览器始终使用 HTTPS 访问网站:
SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS)
HSTS 设置项
| 设置项 | 说明 | 推荐值 |
|---|---|---|
| Max-Age | HSTS 有效期 | 6 个月 |
| Include Subdomains | 包含子域名 | 开启 |
| Preload | 预加载到浏览器 | 开启 |
| No-Sniff | 禁止 MIME 类型嗅探 | 开启 |
注意:开启 HSTS 前确保网站完全支持 HTTPS,否则可能导致部分页面无法访问。
HSTS 预加载
开启 Preload 后,网站会被添加到浏览器的 HSTS 预加载列表:
- 在 Cloudflare 启用 HSTS 和 Preload
- 访问 hstspreload.org
- 提交你的域名
效果:即使用户从未访问过你的网站,浏览器也会强制使用 HTTPS。
证书类型
Universal SSL(通用证书)
Cloudflare 自动为你的域名签发免费证书:
- 覆盖根域名和所有子域名
- 自动续期
- 免费使用
证书颁发机构:Let's Encrypt、DigiCert 等。
Custom SSL Certificate(自定义证书)
付费计划可以使用自定义证书:
- 上传自己的证书和私钥
- 支持扩展验证(EV)证书
- 支持通配符证书
TLS 版本配置
推荐设置
SSL/TLS → Edge Certificates → Minimum TLS Version
推荐:TLS 1.2 或 TLS 1.3
TLS 1.3
TLS 1.3 是最新版本,提供更好的性能和安全性:
SSL/TLS → Edge Certificates → TLS 1.3
优势:
- 更快的握手(1-RTT)
- 更强的加密算法
- 移除不安全的特性
建议:开启 TLS 1.3。
禁用旧版本
建议禁用 TLS 1.0 和 TLS 1.1,这些版本存在安全漏洞:
SSL/TLS → Edge Certificates → Minimum TLS Version
选择 TLS 1.2
加密套件配置
推荐加密套件
Cloudflare 默认使用安全的加密套件:
SSL/TLS → Edge Certificates → Cipher Suites
推荐设置:
- 优先使用 AEAD 加密(AES-GCM、ChaCha20-Poly1305)
- 使用 ECDHE 密钥交换(前向保密)
- 禁用弱加密套件(RC4、DES、3DES)
证书透明度
Certificate Transparency(CT)是证书透明度机制,防止恶意证书签发:
SSL/TLS → Edge Certificates → Certificate Transparency Monitoring
开启后,Cloudflare 会监控证书透明度日志,发现异常证书时通知你。
源服务器证书配置
使用 Let's Encrypt
在源服务器安装 Let's Encrypt 证书:
# 安装 Certbot
sudo apt install certbot
# 获取证书(Nginx)
sudo certbot --nginx -d example.com -d www.example.com
# 获取证书(Apache)
sudo certbot --apache -d example.com -d www.example.com
# 自动续期
sudo certbot renew --dry-run
使用 Cloudflare Origin Certificate
Cloudflare 提供源服务器证书,专门用于 Cloudflare 到源服务器的连接:
- 进入 "SSL/TLS" → "Origin Server"
- 点击 "Create Certificate"
- 选择有效期和主机名
- 下载证书和私钥
- 在源服务器配置证书
Nginx 配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/cloudflare-origin.pem;
ssl_certificate_key /etc/ssl/cloudflare-origin-key.pem;
# ... 其他配置
}
注意:Origin Certificate 仅在 Cloudflare 代理时有效,直接访问会显示证书错误。
Authenticated Origin Pulls
验证 Cloudflare 到源服务器的请求,防止绕过 Cloudflare 直接访问源服务器:
SSL/TLS → Origin Server → Authenticated Origin Pulls
配置步骤
- 在 Cloudflare 启用 Authenticated Origin Pulls
- 下载 Cloudflare 证书
- 在源服务器配置客户端证书验证
Nginx 配置示例:
server {
listen 443 ssl;
server_name example.com;
ssl_client_certificate /etc/ssl/cloudflare-origin-pull-ca.pem;
ssl_verify_client on;
# ... 其他配置
}
常见问题
为什么显示证书错误?
可能原因:
- SSL 模式设置错误(源服务器无证书但选择了 Full Strict)
- 证书未生效(需要等待几分钟)
- 混合内容(页面包含 HTTP 资源)
为什么有些资源显示不安全?
检查混合内容问题:
- 页面使用 HTTPS,但引用了 HTTP 资源
- 使用浏览器开发者工具查看具体资源
- 将所有资源链接改为 HTTPS
如何强制所有子域名使用 HTTPS?
- 启用 Always Use HTTPS
- 启用 HSTS 并包含子域名
- 在 DNS 中确保所有子域名开启代理
参考链接
下一步
完成 SSL/TLS 配置后,接下来学习 WAF 防火墙,了解如何保护网站免受攻击。