1. 程式人生 > >(十四)RabbitMQ訊息佇列-啟用SSL安全通訊

(十四)RabbitMQ訊息佇列-啟用SSL安全通訊

如果RabbitMQ服務在內網中,只有內網的應用連線,我們認為這些連線都是安全的,但是個別情況我們需要讓RabbitMQ對外提供服務。這種情況有兩種解決方案:

  1. 在RabbitMQ外層在封裝一層應用,應用對外提供服務,本質來說RabbitMQ還是隻對內網提供服務。相對更安全,但靈活性差。

  2. RabbitMQ直接對外提供服務。這時除了服務本身的安全性還要考慮資料在網際網路傳輸過程中是否可能被攔截破解。業界標準的解決方案就是SSL。

生成證書

首先確保已經安裝好openssl,通常在安裝WEB執行環境時都會自動安裝。我就找了我之前的一個WEB伺服器。
檢測方法:

openssl version

我在github上發現了一個可以自動生成證書的專案,通過這些shell指令碼方便生成證書,專案github地址為:
https://github.com/Berico-Technologies/CMF-AMQP-Configuration
下載之後上傳到安裝openssl的伺服器中
切換到CMF-AMQP-Configuration/ssl 資料夾,並執行

sh setup_ca.sh MyRabbitMQCA

名稱定義為”MyRabbitMQCA”,這個名字可以自行指定,用於在證書中顯示證書頒發機構名。

  • 生成伺服器證書
sh make_server_cert.sh rabbitmq-server
rabbit

一個引數是伺服器名,第二個引數是密碼。

  • 生成客戶端證書
sh create_client_cert.sh rabbit-client rabbit

第一個引數是客戶端名稱,第二個引數是密碼。

執行完以上步驟之後,會在ssl目錄下生成:ca、server、client三個資料夾。

配置RabbitMQ Server用到的三個檔案如下:
配置RabbitMQ SSL只會用到以下3個檔案:

ca/cacert.pem
server/rabbitmq-server.cert.pem
server/rabbitmq-server.key.pem

將這三個檔案拷貝到RabbitMQ的/usr/local/rabbitmq/ssl/目錄中。

配置RabbitMQ開啟SSL

在WEB控制檯中可以看到rabbitmq.config的地址,如果沒有就新建這個檔案

RabbitMQ配置檔案

vi /usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config

[
    {rabbit, [
        {tcp_listeners, [5672]},
        {ssl_listeners, [5671]},
        {ssl_options, [{cacertfile,"/usr/local/rabbitmq/ssl/cacert.pem"},
            {certfile,"/usr/local/rabbitmq/ssl/rabbitmq-server.cert.pem"},
            {keyfile,"/usr/local/rabbitmq/ssl/rabbitmq-server.key.pem"},
            {verify, verify_peer},
            {fail_if_no_peer_cert, true}
        ]}
    ]}
].

ssl_listeners 指定SSL監聽5671埠。
fail_if_no_peer_cert 意思是是否強制驗證證書。

  • 重啟RabbitMQ
rabbitmqctl stop
rabbitmq-server -detached
  • 檢視是否開啟

RabbitMQ開啟SSL

RabbitMQ技術交流QQ群:327034977(新增時請備註RabbitMQ)