如何禁用RocketMQ TLSv1.0?
字数 1027 2025-08-18 11:37:53
禁用RocketMQ TLSv1.0协议详细指南
背景说明
当系统被扫描发现仍在使用低版本的TLSv1.0协议时,出于安全考虑需要禁用该协议。RocketMQ作为Java编写的消息中间件,其TLS配置有其特殊性。
环境要求
- 操作系统:SuSE Linux Enterprise Server 12 SP2 / CentOS 6.7
- RocketMQ版本:4.2
- JDK版本:1.8
测试方法
在配置前后,使用以下命令测试TLSv1.0是否被禁用:
openssl s_client -connect ip:port -tls1
如果连接成功,说明TLSv1.0仍被启用;连接失败则说明已成功禁用。
解决方案
方法一:修改JDK安全配置
-
定位到JDK的安全配置文件:
JAVA_HOME/jre/lib/security/java.security -
找到
jdk.tls.disabledAlgorithms配置项,添加TLSv1:jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \ EC keySize < 224, 3DES_EDE_CBC, TLSv1 -
保存文件并重启RocketMQ服务。
方法二:修改RocketMQ启动参数
-
修改RocketMQ的启动脚本:
runserver.shrunbroker.sh
-
在启动命令中添加以下JVM参数:
-Dhttps.protocols=TLSv1.2 \ -Djdk.tls.disabledAlgorithms=SSLv3,RC4,MD5withRSA,DH,TLSv1 \ -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
注意:此方法可能不如修改java.security文件有效,因为JDK安全配置会覆盖启动参数。
方法三:修改Netty源代码(高级方案)
RocketMQ使用Netty组件实现SSL/TLS,Netty中硬编码支持TLSv1.0:
-
相关代码位置:
remoting/src/main/java/org/apache/rocketmq/remoting/netty/TlsHelper.javanetty-4.1/handler/src/main/java/io/netty/handler/ssl/OpenSsl.javanetty-4.1/handler/src/main/java/io/netty/handler/ssl/JdkSslContext.java
-
修改Netty源代码,移除对TLSv1.0的支持,然后重新编译RocketMQ。
技术原理
RocketMQ支持两种TLS实现:
- OpenSSL Provider(优先使用,如果系统已安装配置OpenSSL)
- JDK SSL Provider
禁用协议的核心是通过配置JDK的安全策略或直接修改底层网络组件的实现。
推荐方案
对于大多数用户,修改JDK安全配置文件是最简单有效的方法。只有在特殊需求下才考虑修改Netty源代码的方案。
验证方法
配置完成后,再次执行测试命令:
openssl s_client -connect localhost:9876 -tls1
确认连接失败即表示配置成功。