如何修复Windows Server运行Tomcat的TLS/SSL安全漏洞
问题环境说明
- 服务器操作系统:Windows Server 2016 R2
- 业务承载组件:Tomcat 9.0.62
当前系统层配置的已启用TLS密码套件列表如下:
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256
安全扫描上报三类TLS/SSL漏洞:
- TLS/SSL 64位块密码生日攻击漏洞(SWEET32)
- TLS/SSL服务器支持3DES密码套件(当前系统已配置套件列表中无3DES相关条目)
- TLS/SSL服务器支持使用静态密钥密码套件
漏洞根因说明
出现「配置列表里没3DES还扫出3DES漏洞」的问题,核心原因是三层配置独立生效、没有做统一收敛:
- Windows系统Schannel组件的默认密码套件顺序,可能和手动列的已安装套件不一致,部分未被显式禁用的弱套件会保留在协商列表里
- Tomcat如果没有显式指定允许的密码套件,会根据自身使用的JSSE/APR连接器类型,要么继承JRE内置的TLS套件列表,要么继承系统Schannel配置,旧版本JRE默认会启用3DES等弱套件
- 当前配置的套件里本身就包含触发另外两个漏洞的条目:
TLS_RSA_WITH_*开头的都是无向前保密的静态密钥套件,所有CBC模式的AES套件如果和旧协议搭配,也会触发SWEET32相关的扫描规则。
分步修复方案
前置:统一Tomcat TLS配置,接管协商逻辑
找到Tomcat安装目录下conf/server.xml中配置HTTPS的Connector节点,先做基础协议限制:
- 新增参数
sslEnabledProtocols="TLSv1.2,TLSv1.3",直接禁用SSLv3、TLSv1.0、TLSv1.1所有旧版不安全协议 - 不要使用模糊的
sslProtocol="TLS"配置,显式指定协议版本范围,避免自动启用旧协议。
1. 修复静态密钥密码套件漏洞
当前列表里所有TLS_RSA_WITH_前缀的套件都属于静态密钥套件,这类套件不支持前向保密,一旦服务器私钥泄露,所有历史加密流量都可以被解密,直接从允许列表中全部移除即可,只保留ECDHE前缀的支持前向保密的套件。
2. 修复SWEET32漏洞、隐式启用的3DES漏洞
SWEET32漏洞的触发条件是服务器支持块大小为64位的对称加密算法(3DES、Blowfish、IDEA等),部分扫描规则也会将未被显式禁用的CBC模式套件判定为风险项,结合3DES异常上报的问题,做三层加固兜底:
- Tomcat层显式指定允许的安全套件:在Connector节点新增
ciphers参数,只列GCM模式的安全套件,完全排除所有CBC、3DES、RC4、DES类弱套件。
如果用的是Tomcat默认的NIO/NIO2 JSSE连接器,ciphers参数值填:
如果用的是APR/Native连接器,套件名换成OpenSSL格式:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384 - JRE层禁用弱算法:进入Tomcat使用的JRE/JDK安装目录,找到
lib/security/java.security文件,定位到jdk.tls.disabledAlgorithms配置项,在原有值末尾追加3DES, DES, RC4, CBC, TLSv1, TLSv1.1, SSLv3, RSA keySize < 2048,从JRE层面直接阻断弱套件协商。 - Windows系统层兜底加固:打开本地组策略编辑器,依次进入
计算机配置 > 管理模板 > 网络 > SSL配置设置,找到「SSL密码套件顺序」项,设置为「已启用」,将允许列表中所有带3DES、DES、RC4、CBC、IDEA的套件全部删除,只保留前面列的4个GCM模式ECDHE套件,保存后重启服务器让系统配置生效。
验证步骤
所有配置修改完成后重启Tomcat服务,先本地执行openssl s_client -connect 服务IP:443 -cipher 3DES测试3DES套件是否还能协商成功,再用TLS检测工具扫描全量套件列表,确认静态RSA套件、64位块加密套件都不在支持列表中,重新跑安全扫描即可消除这三类告警。
注意:配置ciphers参数前先确认使用的连接器类型,配错套件名格式会导致Tomcat HTTPS端口启动失败,修改配置前记得备份原server.xml文件。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

