HTTPS 安全最佳实践(一)之SSL/TLS部署
字数 2021 2025-08-29 08:32:00
SSL/TLS 部署最佳实践
1. 证书和私钥管理
1.1 私钥强度
- 使用 2048位RSA私钥 作为默认选择,提供约112位安全性
- 如需更高安全性(128位),考虑:
- 3072位RSA密钥(性能影响较大)
- 256位ECDSA密钥(现代客户端支持,性能更好)
1.2 私钥保护
- 在可信计算机上生成私钥,确保足够熵
- 避免让CA生成私钥
- 实施严格的访问控制策略:
- 限制员工访问
- 密码保护私钥(生产环境中作用有限)
- 考虑使用HSM(硬件安全模块)保护高敏感密钥
- 定期更换:
- 每年更新证书(更频繁更好)
- 每次更新证书时生成新私钥(除非需要保持相同密钥)
1.3 证书覆盖范围
- 确保证书覆盖所有可能使用的域名
- 包括主域名和www前缀(如example.com和www.example.com)
- 谨慎使用通配符证书(增加密钥暴露风险)
1.4 选择可信CA
评估CA时应考虑:
- 安全历史记录和响应能力
- 业务专注度
- 提供的服务:
- CRL和OCSP支持
- 网络可用性和性能
- 证书类型(DV/EV)
- 公钥算法支持
- 管理工具
- 技术支持质量
1.5 证书获取时间
- 提前1-3个月获取证书
- 避免在证书即将到期时才更换
1.6 签名算法
- 使用SHA256或更强的签名算法
- 避免SHA1(已不安全)
2. 配置最佳实践
2.1 证书链
- 部署完整的证书链(服务器证书+所有中间证书)
- 不完整的链会导致浏览器警告
2.2 协议选择
- 禁用:
- SSL v2(完全不安全)
- SSL v3(与HTTP一起使用时存在POODLE攻击)
- 限制使用:
- TLS v1.0(传统协议,存在BEAST等漏洞)
- 推荐:
- TLS v1.2(唯一提供现代AEAD加密的版本)
- TLS v1.1(无已知安全问题)
2.3 密码套件
避免:
- 匿名Diffie-Hellman(ADH)套件
- NULL密码套件
- 导出密码套件
- 弱密码(40/56位)
- RC4
- 3DES
推荐套件(按优先级排序):
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
2.4 前向保密(FS)
- 优先使用ECDHE套件
- 使用DHE套件作为ECDHE后备
- 避免RSA密钥交换(除非必要)
- DHE配置至少2048位(防止Logjam攻击)
- ECDHE推荐使用secp256r1(P-256)曲线
2.5 密钥交换算法
- 首选ECDHE(性能更好)
- 次选DHE(至少2048位)
- 避免RSA密钥交换
3. 性能优化
3.1 密钥长度平衡
- RSA密钥:2048位(平衡安全与性能)
- ECDSA密钥:256位
- 加密强度:128位足够
3.2 会话恢复
- 启用会话恢复机制减少加密操作
- 检查会话恢复功能是否正常工作
3.3 网络优化
- 使用长连接(keep-alives)
- 支持HTTP/2
- 考虑WAN优化和CDN
3.4 缓存策略
- 将公共资源(如图片)标记为public
- 敏感内容禁止缓存
3.5 OCSP装订
- 启用OCSP装订减少TLS握手时间
- 测试故障条件下的可靠性
3.6 加密加速
- 使用支持AES硬件加速的CPU
- 考虑ECDSA密钥提高性能
4. HTTP和应用安全
4.1 全面加密
- 全站强制HTTPS
- 避免混合内容(HTTP和HTTPS)
- 消除协议降级漏洞
4.2 第三方资源
- 评估第三方服务风险
- 确保第三方资源通过HTTPS加载
- 考虑使用子资源完整性(SRI)
4.3 Cookie安全
- 所有Cookie标记为Secure
- 考虑添加加密完整性验证
- 敏感Cookie考虑加密
4.4 HTTP压缩
- 禁用TLS压缩(防止CRIME攻击)
- 注意HTTP压缩风险(TIME/BREACH攻击)
4.5 HSTS部署
配置示例:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- 强制浏览器始终使用HTTPS
- 禁用点击式证书警告
- 考虑HSTS预加载
4.6 CSP部署
基础配置示例:
Content-Security-Policy: default-src https: 'unsafe-inline' 'unsafe-eval'; connect-src https: wss:
- 限制混合内容
- 控制第三方资源
- 逐步加强策略
5. 验证与监控
5.1 定期测试
- 使用SSL/TLS评估工具(如SSL Labs服务器测试)
- 测试内容包括:
- 协议支持
- 密码套件配置
- 证书有效性
- 安全头部署
5.2 高级主题
5.2.1 HPKP(HTTP公钥固定)
- 限制哪些CA可以为网站颁发证书
- 部署复杂,有锁定风险
- 适合高安全性需求网站
5.2.2 DNSSEC和DANE
- DNSSEC提供DNS响应完整性
- DANE建立DNS和TLS之间的绑定
- 浏览器支持有限,但在邮件安全中有应用
6. 实施步骤总结
-
准备阶段:
- 选择可信CA
- 生成强私钥
- 获取覆盖所有域名的证书
-
服务器配置:
- 部署完整证书链
- 禁用不安全协议
- 配置安全密码套件
- 启用前向保密
-
性能优化:
- 启用会话恢复
- 配置OCSP装订
- 优化缓存策略
-
应用安全:
- 部署HSTS
- 配置CSP
- 保护Cookie
- 消除混合内容
-
验证维护:
- 全面测试配置
- 建立定期检查机制
- 监控安全公告,及时更新
通过遵循这些最佳实践,您可以建立一个既安全又高性能的TLS部署,有效保护用户数据和企业资产。