Apache SSL/TLS 性能优化清单
一 基础准备与模块启用
- 保持系统与软件为最新版本,安装并启用必要模块:mod_ssl、mod_http2、mod_deflate、mod_headers。在 CentOS/RHEL 可使用:sudo yum install httpd mod_ssl;在 Debian/Ubuntu 可使用:sudo apt install apache2-mod-ssl libapache2-mod-http2。启用模块后重启服务。
- 使用 TLS 证书链完整(将中间证书与服务器证书合并或正确链配置),减少客户端验证往返。
- 如架构允许,考虑 SSL/TLS 终止于前置负载均衡/CDN,由专用设备/服务处理加解密,降低源站 CPU 压力。
二 核心 SSL/TLS 配置优化
- 启用现代协议:优先启用 TLSv1.3,并仅允许 TLSv1.2/1.3,禁用 SSLv2/3、TLSv1.0/1.1。
- 优化密码套件与顺序:启用 ECDHE 以实现 PFS(前向保密),并强制服务器优先选择套件(如:ECDHE-RSA-AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384 等),禁用 NULL、MD5、DES、RC4 等弱套件与算法。
- 会话复用提效:开启 SSLSessionCache(如基于共享内存的 shmcb)并设置合理超时(如 300 秒),减少完整握手次数。
- 在线证书状态校验加速:启用 OCSP Stapling,配置 SSLStaplingCache,减少客户端向 CA 拉取 OCSP 的往返。
- 连接层效率:开启 KeepAlive,设置 MaxKeepAliveRequests(如 100)与 KeepAliveTimeout(如 5 秒),复用 TCP/SSL 连接。
- 内容压缩:启用 mod_deflate 对文本类资源压缩(text/html、text/css、application/javascript 等)。
- 传输层安全策略:添加 HSTS 头(如:max-age=63072000;includeSubDomains;preload),强制浏览器使用 HTTPS。
- HTTP/2 多路复用:启用 HTTP/2(Protocols h2 http/1.1),在单连接上并行传输多请求,降低握手与队头阻塞。
三 推荐配置示例
# 仅允许 TLS 1.2/1.3,优先 ECDHE 与 AEAD 套件
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite 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
SSLHonorCipherOrder On
# 会话复用
SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
SSLSessionCacheTimeout 300
# OCSP Stapling
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLStaplingResponderTimeout 5
SSLStaplingVerify on
# HTTP/2
Protocols h2 http/1.1
# 连接与压缩
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
说明:路径与模块名可按发行版调整(如 CentOS 的 shmcb 路径可为 /var/run/httpd/ssl_scache)。
四 验证与上线流程
- 语法与影响评估:变更前执行 apachectl configtest;使用 ab/siege 等工具做基线压测,观察 TPS、握手时延、CPU 变化。
- 配置核查:使用 openssl s_client -connect yourdomain:443 -tls1_2/1_3 验证协议与套件;在线检测(如 SSL Labs)核对评分与链完整性。
- 渐进发布:先在灰度/低峰时段启用,逐步扩大范围;持续监控 error.log/access.log 与业务指标。
- 资源与边界:结合实例规格调整 MaxRequestWorkers/MaxClients 与 KeepAlive 参数,避免连接风暴与内存耗尽。
五 进阶与架构建议
- 高并发场景优先采用 TLS 终止于负载均衡/CDN,源站仅处理明文 HTTP,显著降低加解密成本。
- 启用 HTTP/2 Server Push(如业务适合)进一步减少往返;对不支持的客户端自动回退。
- 若仍受限于 CPU,考虑 SSL 加速卡/硬件加速 或更高性能的实例规格。