Pesan yang berjalan polos lewat jaringan bisa disadap. Di episode ini kalian membuat sertifikat dan CA, mengkonfigurasi AMQP over TLS di port 5671, mengaktifkan Management UI over HTTPS, memakai verifikasi peer dan client certificate authentication, serta praktik rotasi sertifikat.

Sejauh ini semua koneksi RabbitMQ berjalan polos — tanpa enkripsi. Di jaringan internal yang aman ini mungkin bisa diterima, tapi begitu broker diakses dari luar DC, dari cloud, atau antar region, seluruh isi pesan bisa disadap siapa pun di jalur jaringan. Username, password, dan data bisnis kalian mengalir apa adanya.
Solusinya adalah TLS/SSL: enkripsi di lapisan transport yang melindungi AMQP (port 5671) dan Management UI (HTTPS). RabbitMQ mendukung TLS penuh, termasuk autentikasi dua arah dengan sertifikat client. Episode ini memandu kalian dari nol: membuat Certificate Authority sendiri, mengeluarkan sertifikat server, mengkonfigurasi TLS di rabbitmq.conf, sampai praktik terbaik rotasi sertifikat dan pemilihan cipher suite.
Untuk environment non-produksi, buat CA sendiri dengan OpenSSL:
mkdir -p tls && cd tls
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \
-subj "/CN=MyTestCA" -out ca.pemLalu terbitkan sertifikat untuk hostname RabbitMQ:
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=rabbitmq.local" -out server.csr
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca.key \
-CAcreateserial -days 825 -sha256 -out server.pemSertifikat server harus memakai nama yang dikenali client (hostname atau IP), karena client akan memverifikasinya.
RabbitMQ butuh tiga file: CA (untuk memverifikasi client), sertifikat server, dan private key server:
ca.pem → sertifikat CA
server.pem → sertifikat server
server.key → private key serverKonfigurasi listener TLS di rabbitmq.conf:
listeners.tcp.default = 5672
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq/tls/ca.pem
ssl_options.certfile = /etc/rabbitmq/tls/server.pem
ssl_options.keyfile = /etc/rabbitmq/tls/server.key
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = falseKonfigurasi di atas membuka port 5671 untuk AMQP over TLS dengan verifikasi peer. Client terhubung dengan skema amqps:
import pika
context = ssl.create_default_context(cafile="tls/ca.pem")
params = pika.ConnectionParameters(
host="rabbitmq.local", port=5671,
credentials=pika.PlainCredentials("arman", "pass"),
ssl_options=pika.SSLOptions(context),
)
connection = pika.BlockingConnection(params)Management UI bisa dienkripsi dengan menambahkan port listener HTTPS di rabbitmq.conf (management.tcp.port tetap 15672, management.ssl.port = 15671). Dua mode verifikasi yang tersedia: verify_peer (memverifikasi sertifikat client) dan verify_none (tidak memverifikasi, hanya enkripsi). Untuk autentikasi client penuh, set fail_if_no_peer_cert = true dan gabungkan dengan plugin rabbitmq_auth_mechanism_ssl dari episode 15.
Node dalam cluster juga bisa berkomunikasi lewat TLS dengan mengatur ssl_options pada listener distribusi. Perlu diingat: enkripsi antar node menambah overhead CPU — pertimbangkan apakah jaringan internal cluster sudah cukup terpercaya. Sebelum membuka koneksi TLS, verifikasi bahwa port SSL benar-benar mendengarkan dengan rabbitmq-diagnostics listeners.
Sertifikat harus dirotasi sebelum kedaluwarsa. Siapkan prosedur: terbitkan sertifikat baru, muat ulang konfigurasi atau restart bergiliran (rolling), dan verifikasi dengan koneksi test sebelum sertifikat lama berakhir. Di cluster, rotasi dilakukan per node agar tidak terjadi downtime.
Batasi cipher suite yang dipakai dan matikan versi TLS yang sudah usang:
ssl_options.versions.1 = tlsv1.3
ssl_options.versions.2 = tlsv1.2
ssl_options.ciphers.1 = TLS_AES_256_GCM_SHA384
ssl_options.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384
ssl_options.honor_cipher_order = trueKonfigurasi di atas hanya mengizinkan TLS 1.2 dan 1.3 dengan cipher modern. Hindari TLS 1.0/1.1 yang sudah tidak aman.
Saat koneksi TLS gagal, kesalahan umumnya: hostname tidak cocok dengan CN sertifikat, CA tidak dipercaya client, atau key tidak cocok dengan sertifikat. Verifikasi urutan file dengan:
openssl x509 -noout -modulus -in server.pem | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5Jika dua hash di atas berbeda, private key tidak cocok dengan sertifikat — penyebab paling umum gagal handshake.
Warning
Jangan pernah menonaktifkan verifikasi sertifikat di client produksi hanya untuk menyingkat waktu setup. Skema amqps dengan verifikasi dimatikan memberi kesan aman padahal tidak ada perlindungan dari serangan man-in-the-middle.
Di episode 17 ini kalian sudah membuat CA dan sertifikat server dengan OpenSSL, mengaktifkan AMQP over TLS di port 5671, mengatur verifikasi peer dan client certificate authentication, serta menerapkan praktik rotasi sertifikat, cipher suite, dan troubleshooting TLS.
Inti yang harus dibawa pulang:
amqps untuk koneksi terenkripsi.verify_peer memverifikasi sertifikat client; verify_none hanya enkripsi.Di episode 18 selanjutnya kita akan mengatur network configuration dan firewall — seluruh port yang dipakai RabbitMQ, konfigurasi bind address dan interface, IPv4 vs IPv6, serta aturan firewall untuk single node dan cluster di cloud. Ini yang menentukan siapa yang bisa menjangkau broker kalian!