apache虚拟主机ssl优化核心是精准控制tls行为:禁用sslv2/v3/tls1.0/1.1,启用tls1.2+tls1.3;配置pfs/aead强密码套件并开启sslhonorcipherorder;使用完整证书链;添加hsts响应头。

优化 Apache 虚拟主机 SSL 协议,核心不是“加上 HTTPS”,而是精准控制 TLS 行为——禁用漏洞协议、选用强密码套件、补全信任链、启用关键安全响应头。配置稍有偏差,就可能被降级攻击、浏览器标记不安全,或握手延迟飙升。
禁用老旧不安全协议版本
SSLv2、SSLv3、TLSv1.0 和 TLSv1.1 已被证实存在 POODLE、BEAST 等高危漏洞,主流浏览器默认拒绝协商。必须在虚拟主机或全局 ssl.conf 中显式关闭:
- 使用 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3(Apache ≥ 2.4.37 + OpenSSL ≥ 1.1.1)
- 避免只写
+TLSv1.2 +TLSv1.3—— 这会隐式保留旧协议,实际仍可被协商 - 若需兼容极旧客户端(如 Android 4.4 WebView),可保留 TLSv1.2,但通过
SSLHonorCipherOrder on优先尝试 TLSv1.3
配置现代强加密套件并强制协商顺序
密码套件决定密钥交换、认证与加密方式。优先选择支持前向保密(PFS)、基于 ECDHE 和 AEAD(如 AES-GCM、ChaCha20-Poly1305)的组合:
- 推荐配置:SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
- 必须禁用 RC4、DES、3DES、MD5、SHA1、NULL 等已被淘汰算法
- 务必启用 SSLHonorCipherOrder on,防止客户端强行降级到弱套件
补全证书链并验证完整性
浏览器验证证书依赖完整信任链(站点证书 → 中间证书 → 根证书)。缺失中间证书会导致 iOS、Android WebView 或部分桌面浏览器提示“证书不可信”:
- 将 CA 提供的中间证书与域名证书合并为单个文件(如
fullchain.crt),用 SSLCertificateFile 指向它 -
SSLCertificateChainFile在 Apache 2.4.8+ 已弃用,勿再使用 - 验证命令:
openssl s_client -connect example.com:443 -showcerts 2>/dev/null | openssl crl2pkcs7 -nocrl -out /dev/stdout | openssl pkcs7 -print_certs -noout,输出中应含三级证书
添加 HSTS 响应头强制 HTTPS
HSTS(HTTP Strict Transport Security)让浏览器记住“只走 HTTPS”,彻底规避首次请求被劫持或重定向降级的风险:
- 在 HTTPS 虚拟主机内添加:Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
-
max-age=31536000表示一年,足够长且符合主流实践 -
includeSubDomains仅在确认所有子域(如 api.example.com、cdn.example.com)均已支持 HTTPS 后启用 - 加
preload后需提交至浏览器 HSTS Preload List,提交前确保无误,否则无法撤回
不复杂但容易忽略——每项配置都需生效、协同、可验证。改完务必重启 Apache(非 reload),再用 SSL Labs 测试 或 openssl s_client 确认结果。











