當前位置:
首頁 > 新聞 > 如何禁用RocketMQ TLSv1.0?

如何禁用RocketMQ TLSv1.0?

0x00 前言


前幾天同事找到我,話說他們的系統,被掃描到仍在使用低版本TLSv1.0,要求禁用掉,本來以為很簡單的事情,結果他們折騰好幾個月了,都沒能搞掉它,每月月報上單位黑榜,急得夠嗆,最後病急亂投醫,找到我問問有沒有什麼辦法。


望聞問切,掌握基本信息後,互聯網基本思路,解決問題基本靠搜,搜不到再研究,於是百度必應谷歌一通搜,搜半天啥也沒有。於是潛下心來,慢慢琢磨,最終得出兩個切實可行的解決之道,總結於此,送給有需要的朋友。

0x01 環境說明

OS:SuSE Linux Enterprise Sever 12 SP2/Centos 6.7RocketMQ:4.2JDK1.8

0x02 如何測試是否配置成功?


執行openssl,指定協議版本TLSv1.0進行連接,如果連接成功,則說明配置失敗;反之,則配置成功。命令如下:

Openssls_client -connect ip:port -tls1

0x03 失敗嘗試


SSL/TLS是種協議,不同廠家實現方式不同,其配置方式自然也不同,通常不外乎以下幾種:



修改註冊表


配置文件


通過系統管理功能配置


啟動參數

RocketMQ採用Java編寫,可能使用了JDK SSL Provider,那麼應該可以通過JVM的啟動參數來設定TLS版本、演算法。RocketMQ bin目錄結構和啟動命令如下,兩條命令,對應兩個bash文件(runserver.sh&runbroker.sh)都需要修改啟動參數。



RocketMQ啟動命令:




啟動參數設置

-Dhttps.protocols=TLSv1.2-Djdk.tls.disabledAlgorithms=SSLv3,RC4,MD5withRSA,DH,TLSv1-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2


執行如下測試命令,發現仍然可以使用TLSv1.0建立連接:

Openssl s_client -connect localhost:9876-tls1


0x04 失敗分析

有兩個渠道可以控制JDK使用的TLS協議版本:


1)如上述失敗嘗試,在啟動命令參數中設定禁用的協議演算法

-Djdk.tls.disabledAlgorithms=SSLv3,RC4,MD5withRSA,TLSv1

2)還可以通過JAVA_HOME/jre/lib/security/java.security配置文件,配置項目名稱與啟動參數中完全一致

jdk.tls.disabledAlgorithms=SSLv3,RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize <224, 3DES_EDE_CBC

配置項目名稱完全相同,那麼兩處配置會不會存在覆蓋關係或是互補 ?


因為在上述失敗嘗試中,我使用了java.security的默認配置,即沒有禁用TLSv1.0,所以可得出結論,不是互補關係。


按此推論,我們在JAVA_HOME/jre/lib/security/java.security修改配置,再次使用TLSv1.0協議連接,看看能否成功?



如圖所示,TLSv1.0協議連接失敗,成功禁用TLSv1.0。



0x05 進一步探索

雖然解決了問題,但始終覺得RocketMQ應該提供一個更為直觀的配置方式,懷著疑問和好奇簡單地走讀了一下RocketMQ的源代碼(RocketMQ為開源軟體,其核心組件為jboss netty開源組件),發現在netty中硬編碼寫死了支持TLSv1.0,TLSv1.1,TLSv1.2,所以接下來的解決方案應該不用我說了。該方案也測試通過,可成功禁用。


部分代碼列舉如下:


emotingsrcmainjavaorgapache
ocketmq
emoting
ettyTlsHelper.java

RocketMQ其實支持兩種TLS實現:


1)Openssl provider,如系統安裝配置了openssl,則優先使用


2)JDK SSL provider



RocketMQ引用第三方組件netty實現SSL/TLS




etty-4.1handlersrcmainjavaio
ettyhandlersslOpenSsl.java


支持SSLV2,SSLV3,TLSV1,TLSV1,TLSV1_2



etty-4.1handlersrcmainjavaio
ettyhandlersslJdkSslContext.java



0x06 總結


兩個可行方法:



1) 修改JAVA_HOME/jre/lib/security/java.security配置文件


2) 修改開源組件netty源代碼


建議關鍵詞:RocketMQ 禁用 disable TLSv1.0


*

本文作者:whwofei,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載




喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

淺談讀取USB鍵盤流量的隱藏數據技巧
Windows 0day任意文件覆蓋漏洞分析與驗證

TAG:FreeBuf |