如何禁用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安全配置

  1. 定位到JDK的安全配置文件:

    JAVA_HOME/jre/lib/security/java.security
    
  2. 找到jdk.tls.disabledAlgorithms配置项,添加TLSv1

    jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, 3DES_EDE_CBC, TLSv1
    
  3. 保存文件并重启RocketMQ服务。

方法二:修改RocketMQ启动参数

  1. 修改RocketMQ的启动脚本:

    • runserver.sh
    • runbroker.sh
  2. 在启动命令中添加以下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:

  1. 相关代码位置:

    • remoting/src/main/java/org/apache/rocketmq/remoting/netty/TlsHelper.java
    • netty-4.1/handler/src/main/java/io/netty/handler/ssl/OpenSsl.java
    • netty-4.1/handler/src/main/java/io/netty/handler/ssl/JdkSslContext.java
  2. 修改Netty源代码,移除对TLSv1.0的支持,然后重新编译RocketMQ。

技术原理

RocketMQ支持两种TLS实现:

  1. OpenSSL Provider(优先使用,如果系统已安装配置OpenSSL)
  2. JDK SSL Provider

禁用协议的核心是通过配置JDK的安全策略或直接修改底层网络组件的实现。

推荐方案

对于大多数用户,修改JDK安全配置文件是最简单有效的方法。只有在特殊需求下才考虑修改Netty源代码的方案。

验证方法

配置完成后,再次执行测试命令:

openssl s_client -connect localhost:9876 -tls1

确认连接失败即表示配置成功。

禁用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是否被禁用: 如果连接成功,说明TLSv1.0仍被启用;连接失败则说明已成功禁用。 解决方案 方法一:修改JDK安全配置 定位到JDK的安全配置文件: 找到 jdk.tls.disabledAlgorithms 配置项,添加 TLSv1 : 保存文件并重启RocketMQ服务。 方法二:修改RocketMQ启动参数 修改RocketMQ的启动脚本: runserver.sh runbroker.sh 在启动命令中添加以下JVM参数: 注意:此方法可能不如修改java.security文件有效,因为JDK安全配置会覆盖启动参数。 方法三:修改Netty源代码(高级方案) RocketMQ使用Netty组件实现SSL/TLS,Netty中硬编码支持TLSv1.0: 相关代码位置: remoting/src/main/java/org/apache/rocketmq/remoting/netty/TlsHelper.java netty-4.1/handler/src/main/java/io/netty/handler/ssl/OpenSsl.java netty-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源代码的方案。 验证方法 配置完成后,再次执行测试命令: 确认连接失败即表示配置成功。