如何移除Apache SSL的TLS_RSA_WITH_3DES_EDE_CBC_SHA弱加密套件
根本原因
你写的套件白名单没有完全生效,或是没有做强制禁用规则触发了OpenSSL的默认兼容fallback逻辑。你当前的SSLCipherSuite只枚举了允许的强套件,但如果存在配置加载顺序靠后被全局/虚拟主机配置覆盖、旧版Apache/OpenSSL自动追加兼容套件的情况,不在白名单里的DES-CBC3-SHA(也就是扫描出的TLS_RSA_WITH_3DES_EDE_CBC_SHA)就会被启用。
修复操作
- 首先修改
/etc/letsencrypt/options-ssl-apache.conf中的SSLCipherSuite行,在现有套件列表末尾追加强制禁用规则,最终配置如下:
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:!aNULL:!eNULL:!MD5:!3DES:!DES-CBC3-SHA:!RC4:!DSS:!LOW
OpenSSL套件规则里,
!前缀代表永久禁用对应套件,优先级高于所有允许类规则,不管其他配置怎么写、有没有fallback逻辑,带!标记的套件都不会被协商使用。
- 排查全局SSL配置的覆盖问题,不同发行版的全局配置路径不一样:
- Debian/Ubuntu:检查
/etc/apache2/mods-enabled/ssl.conf - RHEL/CentOS/AlmaLinux:检查
/etc/httpd/conf.d/ssl.conf
找到文件内所有SSLCipherSuite配置项,要么直接注释掉,要么改成和上面一致的规则,避免全局配置优先级高于letsencrypt的统一配置。
- Debian/Ubuntu:检查
- 逐个检查所有HTTPS虚拟主机配置,确认每个443端口的虚拟主机块里都正确引入了letsencrypt的配置文件:
Include /etc/letsencrypt/options-ssl-apache.conf
如果虚拟主机块里单独写了其他SSLCipherSuite规则,直接删掉,避免覆盖统一配置。
- 校验配置并重载服务:
先跑配置校验,防止写错配置导致服务中断:
校验返回# Debian/Ubuntu apache2ctl configtest # RHEL/CentOS系 httpd -tSyntax OK再重载服务:# Debian/Ubuntu systemctl reload apache2 # RHEL/CentOS系 systemctl reload httpd
验证方式
重载完成后本地用openssl测试3DES套件能不能协商成功:
openssl s_client -connect 你的服务域名:443 -cipher DES-CBC3-SHA
返回handshake failure就说明3DES套件已经被彻底禁用,重新做安全扫描就不会出对应告警。
内容的提问来源于stack exchange,提问作者bbaho
相关产品推荐
相关产品推荐

