Skip to content

SSL优化配置

优化SSL配置可以提高HTTPS性能,减少延迟。

SSL会话缓存

基本配置

nginx
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;

参数说明

ssl_session_cache

  • shared:SSL:10m:共享缓存,10MB大小
  • 可以存储约40000个会话

ssl_session_timeout

  • 会话超时时间
  • 默认值:5m

ssl_session_tickets

  • 会话票据
  • 推荐关闭以提高安全性

OCSP Stapling

基本配置

nginx
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

参数说明

ssl_stapling

  • 启用OCSP Stapling
  • 减少SSL握手时间

ssl_stapling_verify

  • 验证OCSP响应
  • 提高安全性

ssl_trusted_certificate

  • 信任的证书链
  • 包含中间证书

resolver

  • DNS解析器
  • 用于解析OCSP服务器

HTTP/2

启用HTTP/2

nginx
listen 443 ssl http2;

HTTP/2优势

  • 多路复用
  • 头部压缩
  • 服务器推送
  • 减少延迟

SSL协议和加密套件

推荐配置

nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

参数说明

ssl_protocols

  • 支持的SSL/TLS协议
  • 推荐TLSv1.2和TLSv1.3

ssl_ciphers

  • 支持的加密套件
  • 优先使用ECDHE

ssl_prefer_server_ciphers

  • 服务器选择加密套件
  • 推荐关闭以使用客户端偏好

完整优化配置

生产环境配置

nginx
server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # SSL协议和加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;

    # SSL会话缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # 性能优化
    ssl_buffer_size 4k;

    # 安全头
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    root /var/www/html;
    index index.html;
}

性能测试

SSL握手时间测试

bash
openssl s_time -connect example.com:443 -new

SSL配置测试

访问 https://www.ssllabs.com/ssltest/ 进行SSL评分

HTTP/2测试

bash
curl -I --http2 https://example.com

常见问题

OCSP Stapling不生效

原因: DNS解析器配置错误

解决: 检查resolver配置

nginx
resolver 8.8.8.8 8.8.4.4 valid=300s;

SSL握手慢

原因: SSL会话缓存配置错误

解决: 检查ssl_session_cache配置

nginx
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

HTTP/2不生效

原因: 浏览器不支持或配置错误

解决: 检查浏览器支持和配置

nginx
listen 443 ssl http2;

总结

SSL优化的关键点:

  • 会话缓存:减少SSL握手时间
  • OCSP Stapling:提高握手效率
  • HTTP/2:提高传输性能
  • 协议和加密套件:使用现代协议和加密套件
  • 性能测试:定期测试SSL性能

合理优化SSL配置,提高HTTPS性能和用户体验。