rabbitmq啟用外接認(rèn)證模式 解決 AMQP明文驗(yàn)證漏洞問題

1饭冬、漏洞復(fù)現(xiàn)

登入rabbimq-management 管理界面无拗,f12打開開發(fā)者工具挫鸽,在network一項(xiàng)捕獲請(qǐng)求,請(qǐng)求頭中的Cookie值為base64 加密密文埃脏,可以使用通用base解密搪锣,

例如:請(qǐng)求頭中抓到 Cookie: m=2258:Z3Vlc3Q6Z3Vlc3Q%253D

對(duì) m=2258:Z3Vlc3Q6Z3Vlc3Q%253D 解密為 guest:guest

2、認(rèn)證模式
Mechanism Description
PLAIN SASL PLAIN 驗(yàn)證彩掐。在RabbitMQ服務(wù)器和客戶端中构舟,默認(rèn)是啟用的,其他大多數(shù)客戶端也是默認(rèn)的堵幽。
AMQPLAIN PLAIN的非標(biāo)準(zhǔn)版本狗超,用于向后兼容。該功能在RabbitMQ服務(wù)器中默認(rèn)啟用朴下。
EXTERNAL 身份驗(yàn)證使用帶外機(jī)制進(jìn)行努咐,例如x509證書對(duì)等驗(yàn)證、客戶端IP地址范圍或類似的機(jī)制殴胧。這種機(jī)制通常由RabbitMQ插件提供渗稍。
RABBIT-CR-DEMO 演示challenge-response認(rèn)證的非標(biāo)準(zhǔn)機(jī)制。該機(jī)制具有與PLAIN等價(jià)的安全性团滥,在RabbitMQ服務(wù)器中默認(rèn)不啟用竿屹。

rabbitmq的auth_mechanisms配置中默認(rèn)為PLAIN模式,與AMQPLAIN同為明文認(rèn)證灸姊,解決AMQP明文驗(yàn)證漏洞需要修改為EXTERNAL

3拱燃、EXTERNAL認(rèn)證配置

修改 RabbitMQ 配置文件 /etc/rabbitmq/rabbitmq.config,此文件默認(rèn)不存在厨钻,需要手動(dòng)創(chuàng)建

[{rabbit, [
    {ssl_listeners, [5671]},
    {ssl_options, [
        {cacertfile, "/etc/rabbitmq/ssl/cacert.pem"},
        {certfile,   "/etc/rabbitmq/ssl/rabbitmq-server.cert.pem"},
        {keyfile,    "/etc/rabbitmq/ssl/rabbitmq-server.key.pem"},
        {verify, verify_peer},
        {fail_if_no_peer_cert, true},
        {ciphers, [
            "ECDHE-ECDSA-AES256-GCM-SHA384","ECDHE-RSA-AES256-GCM-SHA384",
            "ECDHE-ECDSA-AES256-SHA384","ECDHE-RSA-AES256-SHA384",
            "ECDHE-ECDSA-DES-CBC3-SHA","ECDH-ECDSA-AES256-GCM-SHA384",
            "ECDH-RSA-AES256-GCM-SHA384","ECDH-ECDSA-AES256-SHA384",
            "ECDH-RSA-AES256-SHA384","DHE-DSS-AES256-GCM-SHA384",
            "DHE-DSS-AES256-SHA256","AES256-GCM-SHA384",
            "AES256-SHA256","ECDHE-ECDSA-AES128-GCM-SHA256",
            "ECDHE-RSA-AES128-GCM-SHA256","ECDHE-ECDSA-AES128-SHA256",
            "ECDHE-RSA-AES128-SHA256","ECDH-ECDSA-AES128-GCM-SHA256",
            "ECDH-RSA-AES128-GCM-SHA256","ECDH-ECDSA-AES128-SHA256",
            "ECDH-RSA-AES128-SHA256","DHE-DSS-AES128-GCM-SHA256",
            "DHE-DSS-AES128-SHA256","AES128-GCM-SHA256",
            "AES128-SHA256","ECDHE-ECDSA-AES256-SHA",
            "ECDHE-RSA-AES256-SHA","DHE-DSS-AES256-SHA",
            "ECDH-ECDSA-AES256-SHA","ECDH-RSA-AES256-SHA",
            "AES256-SHA","ECDHE-ECDSA-AES128-SHA",
            "ECDHE-RSA-AES128-SHA","DHE-DSS-AES128-SHA",
            "ECDH-ECDSA-AES128-SHA","ECDH-RSA-AES128-SHA","AES128-SHA"
        ]}
    ]},
    {auth_mechanisms,['EXTERNAL']},
    {ssl_cert_login_from,common_name}
]}].

主要配置項(xiàng)說明:

  • verify
    • verify_peer 客戶端與服務(wù)端互相發(fā)送證書
    • verify_none 禁用證書交換與校驗(yàn)
  • fail_if_no_peer_cert
    • true 不接受沒證書的客戶端連接
    • false 接受沒證書的客戶端連接
  • auth_mechanisms 認(rèn)證機(jī)制扼雏,此處使用 EXTERNAL 表示只使用插件提供認(rèn)證功能
  • ssl_cert_login_from使用證書中的哪些信息登錄,如果不配置這項(xiàng)是走的DN夯膀,配置走CN
    • common_name CN名稱

啟用插件

#啟用rabbitmq_auth_mechanism_ssl作為EXTERNAL認(rèn)證機(jī)制的實(shí)現(xiàn)
rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl
#查看啟動(dòng)結(jié)果
rabbitmq-plugins list

重啟rabbitmq 并添加rabbitmq-client用戶

service rabbitmq-server restart
#添加證書登錄用戶(用戶名要與客戶端證書名稱前綴一致)诗充,密碼任意
rabbitmqctl add_user 'rabbitmq-client' '2a55f70a841f18b97c3a7db939b7adc9e34a0f1b'
#給rabbitmq-client用戶虛擬主機(jī)/的所有權(quán)限,如需其他虛擬主機(jī)替換/
rabbitmqctl set_permissions -p "/" "rabbitmq-client" ".*" ".*" ".*"

代碼中添加配置

@Configration
public class RabbitmqConfig{

    @Autowired
    RabbitProperties rabbitProperties;
    @Autowired
    CachingConnectionFactory cachingConnectionFactory;
    
    /**
     * 解決安全掃描 AMQP明文登錄漏洞 僅當(dāng)rabbitmq啟用ssl時(shí)并且配置證書時(shí)诱建,顯式設(shè)置EXTERNAL認(rèn)證機(jī)制<br/>
     * EXTERNAL認(rèn)證機(jī)制使用X509認(rèn)證方式蝴蜓,服務(wù)端讀取客戶端證書中的CN作為登錄名稱,同時(shí)忽略密碼
     */
    @PostConstruct
    public void rabbitmqSslExternalPostConstruct() {
        boolean rabbitSslEnabled = BooleanUtils.toBoolean(rabbitProperties.getSsl().getEnabled());
        boolean rabbitSslKeyStoreExists = rabbitProperties.getSsl().getKeyStore() != null;
        if (rabbitSslEnabled && rabbitSslKeyStoreExists) {
            cachingConnectionFactory.getRabbitConnectionFactory().setSaslConfig(DefaultSaslConfig.EXTERNAL);
        }
    }
}

application 配置文件修改

spring: 
  rabbitmq:
    host: ip
    port: 5671
    publisher-returns: true
    virtual-host: /
    ssl:
      enabled: true
      key-store: classpath:ssl/rabbitmq-client.keycert.p12
      key-store-password: rabbit
      trust-store: classpath:ssl/rabbitmqTrustStore
      trust-store-type: JKS
      verify-hostname: false
    listener:
      direct:
        acknowledge-mode: manual
4、參考文章

https://www.cnblogs.com/hellxz/p/15776987.html

-end-

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茎匠,一起剝皮案震驚了整個(gè)濱河市格仲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诵冒,老刑警劉巖凯肋,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汽馋,居然都是意外死亡侮东,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門豹芯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悄雅,“玉大人,你說我怎么就攤上這事铁蹈】硐校” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵握牧,是天一觀的道長容诬。 經(jīng)常有香客問我,道長我碟,這世上最難降的妖魔是什么放案? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮矫俺,結(jié)果婚禮上吱殉,老公的妹妹穿的比我還像新娘。我一直安慰自己厘托,他們只是感情好友雳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铅匹,像睡著了一般押赊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上包斑,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天流礁,我揣著相機(jī)與錄音,去河邊找鬼罗丰。 笑死神帅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的萌抵。 我是一名探鬼主播找御,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼元镀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霎桅?” 一聲冷哼從身側(cè)響起栖疑,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滔驶,沒想到半個(gè)月后遇革,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓜浸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年澳淑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片插佛。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖量窘,靈堂內(nèi)的尸體忽然破棺而出雇寇,到底是詐尸還是另有隱情,我是刑警寧澤蚌铜,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布锨侯,位于F島的核電站,受9級(jí)特大地震影響冬殃,放射性物質(zhì)發(fā)生泄漏囚痴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一审葬、第九天 我趴在偏房一處隱蔽的房頂上張望深滚。 院中可真熱鬧,春花似錦涣觉、人聲如沸痴荐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽生兆。三九已至,卻和暖如春膝宁,著一層夾襖步出監(jiān)牢的瞬間鸦难,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工员淫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留合蔽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓满粗,卻偏偏與公主長得像辈末,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容