Apache的SSL/TLS配置必须置于VirtualHost或SSL专用配置段中,不可在httpd.conf顶层设置;推荐禁用旧协议(SSLv2/3、TLSv1/1.1),启用TLSv1.2+及PFS套件,并配合SSLHonorCipherOrder、SSLCompression、SSLSessionTickets和HSTS等指令确保安全。
apache主配置文件中不直接配置ssl/tls全局加密协议与安全套件,这类设置必须放在启用ssl的虚拟主机(virtualhost)上下文中,或独立的ssl配置段里。直接在httpd.conf顶层写sslprotocol或sslciphersuite通常无效,甚至可能被忽略——因为mod_ssl要求这些指令作用于具体的https监听端口(如443)和虚拟主机范围。
必须在VirtualHost或SSL专用配置块中设置
Apache的SSL指令属于“每服务器”或“每虚拟主机”作用域,不能全局生效。常见正确位置包括:
-
/etc/httpd/conf.d/ssl.conf(CentOS/RHEL默认路径)中的<VirtualHost _default_:443>块内 -
/etc/apache2/mods-enabled/ssl.conf(Ubuntu/Debian)配合sites-enabled/下的HTTPS站点配置 - 自定义的
Include conf/extra/httpd-ssl.conf所引用的文件中,且该文件内含<VirtualHost *:443>
推荐的SSLProtocol与SSLCipherSuite配置
为兼顾安全性与兼容性(支持现代浏览器,同时避开已知漏洞),建议使用以下组合:
-
禁用不安全协议:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1(仅保留TLSv1.2及以上;若需兼容旧系统可酌情保留TLSv1.1,但不推荐) -
优先启用前向保密(PFS)套件:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 -
补充兼容性套件(可选):如需支持较老客户端(如Android 4.4、IE 11),可追加
:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA,但避免包含RC4、MD5、aNULL、eNULL等弱算法
配套关键指令不可遗漏
仅设协议和套件不够,还需同步配置以下项以确保实际生效:
-
SSLHonorCipherOrder on:强制按SSLCipherSuite顺序选择,而非客户端优先 -
SSLCompression off:禁用SSL压缩,防范CRIME攻击 -
SSLSessionTickets off:关闭会话票据,提升前向保密强度(需配合SSLSessionCache合理设置) -
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload":启用HSTS,强制后续访问走HTTPS
验证配置是否生效
修改后务必执行:
-
apachectl configtest或apache2ctl configtest检查语法 -
systemctl reload httpd(CentOS)或systemctl reload apache2(Ubuntu)重载服务 - 用 SSL Labs Test 扫描域名,确认协议支持、套件排序、HSTS等全部达标


















