在部署 HTTPS 服务时,选择 RSA 还是 ECDSA 证书是一个常见问题。这两种签名算法在安全强度、证书大小、握手性能和兼容性上存在显著差异。本文基于实测数据和实际案例,帮助你做出明智的选择。
核心差异一览
| 指标 | RSA 2048 | ECDSA P-256 | 备注 |
|---|---|---|---|
| 密钥长度 | 2048 bits | 256 bits | ECDSA 密钥短得多 |
| 证书大小 | ~1100 bytes | ~562 bytes | ECDSA 证书约小一半 |
| 私钥大小 | ~1704 bytes | ~302 bytes | ECDSA 私钥约小 82% |
| 安全强度 | ~112 bits | ~128 bits | P-256 比 RSA 2048 更强 |
| 签名大小 | 256 bytes | 64 bytes | ECDSA 签名更紧凑 |
以上数据基于 OpenSSL 本地生成的自签名证书实测。
为什么 ECDSA 更高效?
1. 更小的证书体积
ECDSA 证书比 RSA 证书小约一半,这意味着:
- 更少的 TCP 分段:证书需要更少的网络数据包传输
- 更低的丢包敏感度:在移动网络环境下,减少 TCP 重传
- 更快的传输:握手阶段传输的数据更少
从 Wireshark 抓包数据来看:
|
|
2. 更快的加密运算
ECDSA 使用椭圆曲线密码学,相同的安全强度下,密钥更短,运算更快。在高并发场景下,这种性能优势会被放大。
实际案例数据
根据 2025 年的真实部署案例:
电商场景
- 高峰期处理:30,000 会话/分钟
- 移动端流量:70%
从 RSA 2048 迁移到 ECDSA P-256 后:
- TTFB(首字节时间)减少 15-25 ms
- CPU 负载 下降 38%
- 并发连接数 提升 41%
金融场景(mTLS)
- 请求量:180,000 请求/分钟
- 双向认证:每次连接都进行完整握手
迁移到 ECDSA 后:
- 密码学成本 降低 52%
- 握手时间 从 11-13ms 降至 6-8ms
- 资源需求 减少,无需激进自动扩容,节省约 25% 成本
兼容性问题
虽然 ECDSA 优势明显,但需要考虑客户端兼容性:
| 客户端 | 支持情况 |
|---|---|
| 现代浏览器 | ✅ 全面支持 |
| Android | 4.0+ |
| iOS | 5.0+ |
| Windows | Vista+ |
| 旧版 OpenSSL 0.9.x | ❌ 不支持 |
| 某些嵌入式 TLS 栈 | ❌ 不支持 |
如果你的服务需要支持老旧客户端,可能需要同时部署 RSA 和 ECDSA 证书(双证书策略),或者继续使用 RSA 2048。
生成证书的命令
生成 RSA 证书
|
|
生成 ECDSA 证书
|
|
Nginx 双证书配置
如果需要同时支持 RSA 和 ECDSA 客户端:
|
|
什么时候选什么?
选择 ECDSA 的场景
- 高并发 HTTPS 服务
- 移动端用户占比高
- 对延迟敏感的应用
- 新部署的公开服务
- 资源受限的服务器
继续使用 RSA 的场景
- 需要兼容老旧客户端
- 现有基础设施依赖 RSA
- 内部系统有特定合规要求
- 不想管理双证书
安全考虑
RSA 密钥长度
- RSA 2048:当前生产环境最低要求,可安全使用到 2030 年左右
- RSA 4096:更安全但性能下降明显,除非有特殊要求,否则ECDSA P-256 是更好的选择
ECDSA 曲线选择
- P-256 (prime256v1):主流选择,兼容性好,安全强度足够
- P-384 (secp384r1):更高的安全强度(~192 bits),适合政府、金融等高安全要求场景
总结
对于大多数现代 Web 服务,ECDSA P-256 是更好的选择:
- 相同安全强度下,密钥更短
- 证书更小,握手更快
- CPU 负载更低,支持更多并发连接
- 安全强度实际更高(128 bits vs 112 bits)
除非有明确的兼容性要求,否则没有理由继续使用 RSA 2048。