如何禁用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 原創獎勵計劃,未經許可禁止轉載
※淺談讀取USB鍵盤流量的隱藏數據技巧
※Windows 0day任意文件覆蓋漏洞分析與驗證
TAG:FreeBuf |