【RabbitMQ】讓訊息更安全吧!啟用 TLS 把 amqps 用起來

Zam Huang
3 min readJul 29, 2020

--

前言

這篇暫時不把憑證如何產生牽扯進來,如果以後有寫再補個連結。主要會分 server side 跟 client side 需要準備哪些東西,跟怎麼連線。

Server

首先你需要準備 root CA 還有透過他產生的 certificate and key ,再把這三個準備好的憑證放上對應位置,並在 rabbitmq.conf 上加上相關的 TLS 設定。另外解釋一下這兩個參數:verify, fail_if_no_peer_cert

ssl_options.verify

主要有 verify_peerverify_none,建議當然是使用 verify_peer,但你如果只想管連線是使用加密,而不管 certificate exchange,可以直接用 verify_none。

ssl_options.fail_if_no_peer_cert

主要設定為 true or false,推薦一樣是使用 true 來啟用他,但如果你要讓 client 沒有 certificate 也可以連,請設為 false。

rabbitmq.conf

啟動 rabbitmq server 時,一定會有個 config,但這個 config 根據版本會有點不一樣,現在使用的是較新版本的 config。要加的參數如下:

## TLS listeners are configured in the same fashion as TCP listeners,
## including the option to control the choice of interface.
listeners.ssl.default = 0.0.0.0:5671## TLS configuration.
## Related doc guide: http://rabbitmq.com/ssl.html
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true
ssl_options.cacertfile = {ca.pem path}
ssl_options.certfile = {mq.pem path}
ssl_options.keyfile = {mq.key path}

Client

這邊使用透過 python pika 來進行連線,不過其他語言其實也大同小異,就主要會有這兩種作法,事先一樣需要準備 Server 上的那三個 TLS 憑證(ca.pem, mq.pem, mq.key)。

比較值得注意的是 server_name_indication 要記得給對,是憑證上有設定的名字。

方法一:使用 ConnectionParameters

方法二:使用 URLParameters

這個方法是直接透過 amqp protocol 定義的 URL 來進行連線,如果是在一般情況,方法一寫法上會比較好讀。但是這種用 amqp url 的方式,可以讓你在特別的時候派上用場,例如說 rabbitmq federation,他需要把 amqp url 存起來,以便訊息來的時候進行轉送,這時候你就會需要組出 amqp url 給 federation 了。

Reference

--

--

Zam Huang
Zam Huang

Written by Zam Huang

一個記錄著自己人生過程的工程師。A Software Engineer at Ruckus Network in Taiwan。 IG, Linkedin:@zam_huang, stack overflow: user:2613194

No responses yet