在部署 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 抓包数据来看:

1
2
3
4
5
6
7
RSA 2048 握手:
  Certificate: 3530 bytes
  Signature: 256 bytes

ECDSA P-256 握手:
  Certificate: 1689 bytes
  Signature: 70 bytes

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 证书

1
2
3
4
5
6
7
8
# 生成 RSA 私钥
openssl genrsa -out server.key 2048

# 生成 CSR
openssl req -new -key server.key -out server.csr -subj "/CN=example.com"

# 自签名(测试用)
openssl req -new -x509 -days 365 -key server.key -out server.crt -subj "/CN=example.com"

生成 ECDSA 证书

1
2
3
4
5
6
7
8
# 生成 ECDSA P-256 私钥
openssl ecparam -genkey -name prime256v1 -out server.key

# 生成 CSR
openssl req -new -key server.key -out server.csr -subj "/CN=example.com"

# 自签名(测试用)
openssl req -new -x509 -days 365 -key server.key -out server.crt -subj "/CN=example.com"

Nginx 双证书配置

如果需要同时支持 RSA 和 ECDSA 客户端:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server {
    listen 443 ssl;
    
    # RSA 证书(兼容旧客户端)
    ssl_certificate /path/to/server-rsa.crt;
    ssl_certificate_key /path/to/server-rsa.key;
    
    # ECDSA 证书(优先使用)
    ssl_certificate /path/to/server-ecdsa.crt;
    ssl_certificate_key /path/to/server-ecdsa.key;
    
    # 优先使用 ECDSA
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDSA+SHA256:AESGCM+SHA256;
}

什么时候选什么?

选择 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 是更好的选择

  1. 相同安全强度下,密钥更短
  2. 证书更小,握手更快
  3. CPU 负载更低,支持更多并发连接
  4. 安全强度实际更高(128 bits vs 112 bits)

除非有明确的兼容性要求,否则没有理由继续使用 RSA 2048。


参考来源