RabbitMQ消息隊列(十四)-啟用SSL安全通訊
如果RabbitMQ服務在內網中,只有內網的應用連接,我們認為這些連接都是安全的,但是個別情況我們需要讓RabbitMQ對外提供服務。這種情況有兩種解決方案:
-
在RabbitMQ外層在封裝一層應用,應用對外提供服務,本質來說RabbitMQ還是只對內網提供服務。相對更安全,但靈活性差。
-
RabbitMQ直接對外提供服務。這時除了服務本身的安全性還要考慮數據在互聯網傳輸過程中是否可能被攔截破解。業界標準的解決方案就是SSL。
安裝Git
1、首先應該安裝好必要的依賴包,省得在安裝過程中出現各種問題。
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
2、下載並編譯git
下載、解壓
wget https://www.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz tar xzf git-1.8.3.1.tar.gz
編譯並驗證
cd git-1.8.3.1 make prefix=/usr/local/git all make prefix=/usr/local/git install echo "export PATH=$PATH:/usr/local/git/bin" >>/etc/bashrc source /etc/bashrc git --version
安裝成功
生成證書
首先確保已經安裝好openssl,通常在安裝WEB運行環境時都會自動安裝。我就找了我之前的一個WEB服務器。
檢測方法:
openssl version
在Google了一番之後,我發現了這篇文章:
http://www.gettingcirrius.com/2013/01/configuring-ssl-for-rabbitmq.html
國內的童鞋們也許需要通過代理才能訪問,不過沒關系,作者還在github上寫了一些shell腳本方便生成證書,項目github地址為:
https://github.com/Berico-Technologies/CMF-AMQP-Configuration
可直接通過git命令進行clone到本地(最好新建個文件夾AMQPSSL):
git clone https://github.com/Berico-Technologies/CMF-AMQP-Configuration.git
在clone後的項目目錄中,doc文件夾下有詳細的說明shell腳本如何使用。
對RabbitMQ SSL支持官方文檔感興趣的童鞋,請移步:
https://www.rabbitmq.com/ssl.html
1. 確保已經安裝好了openssl,具體安裝方法請自行google;
切換到 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的建議可以把需要用到的3個文件帶目錄結構拷貝到 /rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl 目錄下(沒有ssl文件夾的話可以新建),那麽配置文件內容為:目錄中。
配置RabbitMQ開啟SSL
在WEB控制臺中可以看到rabbitmq.config的地址,如果沒有就新建這個文件
vi /rabbitmqinaction/rabbitmq/etc/rabbitmq/rabbitmq.config [ {rabbit, [{vm_memory_high_watermark_paging_ratio, 0.4}, {vm_memory_high_watermark, 0.4}, {tcp_listeners, [5672]}, {ssl_listeners, [5671]}, {ssl_options, [{cacertfile,"/rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl/cacert.pem"}, {certfile,"/rabbitmqinaction/rabbitmq/etc/rabbitmq/ssl/rabbitmq-server.cert.pem"}, {keyfile,"/rabbitmqinaction/rabbitmq/etc/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安全通訊