sslprotocol指令在虚拟主机中显式配置(如sslprotocol all -sslv2 -sslv3 -tlsv1 -tlsv1.1 +tlsv1.2 +tlsv1.3)可强制启用现代协议、禁用不安全旧协议,实现站点级精细控制,并需配合强加密套件与sslhonorcipherorder on确保安全实效。
直接在虚拟主机配置中设置 sslprotocol 指令,是强制服务器仅启用现代加密协议(如 tlsv1.2、tlsv1.3)并禁用老旧不安全协议(如 sslv2、sslv3、tlsv1.0、tlsv1.1)的关键手段。它不依赖全局配置,可按站点精细控制,避免“一刀切”影响其他虚拟主机。
明确指定支持的协议版本
在 Apache 的 <virtualhost></virtualhost> 块内,使用 SSLProtocol 显式列出允许的协议,拒绝所有未声明的版本:
-
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3是当前推荐写法; - 不要写
SSLProtocol +all或SSLProtocol all,它们默认包含已淘汰的协议; - 部分旧版 Apache 不支持 TLSv1.3,需确认模块版本(
mod_ssl≥ 2.4.37 且 OpenSSL ≥ 1.1.1)。
配合 SSLCipherSuite 提升整体加密强度
仅限制协议不够,还需同步收紧密钥交换与加密套件:
- 优先选用前向保密(PFS)套件,例如:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 禁用弱算法:在套件末尾添加
!aNULL !eNULL !EXPORT !DES !RC4 !MD5 !PSK !SRP !CAMELLIA; - 建议搭配
SSLHonorCipherOrder on,确保服务端优先级生效。
验证配置是否真正生效
修改后必须重载服务,并通过外部工具验证实际协商结果:
- 执行
sudo apachectl configtest && sudo systemctl reload apache2(Debian/Ubuntu)或httpd -t && systemctl reload httpd(RHEL/CentOS); - 使用
openssl s_client -connect example.com:443 -tls1_1测试 TLSv1.1 是否被拒绝(应返回 handshake failure); - 用 SSL Labs Test 全面扫描,重点关注 “Handshake Simulation” 中各客户端实际使用的协议与套件。
注意兼容性与运维边界
强制升级可能影响极少数老旧客户端,但属于必要安全取舍:
- Windows XP / IE6–8、Android 4.3 及更早系统默认不支持 TLSv1.2,已超出主流支持周期;
- 若业务确需兼容旧设备(如特定工业终端),应在独立虚拟主机中单独配置宽松策略,而非降低主站标准;
- 确保证书本身由可信 CA 签发、域名匹配、未过期——否则即使协议再新,浏览器仍会显示不安全警告。











