RabbitMQ + HTTPS/TLS

<< Click to Display Table of Contents >>

Navigation:  Linux - Ubuntu 24.04 > RabbitMQ >

RabbitMQ + HTTPS/TLS

SSL/TLS - Gruselige Methode

RabbitMQ ist portabel ... und daher übernimmt es die Arbeiten mit SSL/TLS selber - also muß man es auch konfigurieren. Die Einträge für ssl können sich für veschiedene Plugins wiederholen.  Die Arbeit liegt darin, die notwendigen pem-Dateien zur Verfügung zu stellen.

 

management.ssl.port       = 15671

management.ssl.cacertfile = /home/1234567/ssl/all_cacerts.pem

management.ssl.certfile   = /home/1234567/ssl/blubber_ssl_certificate.pem

management.ssl.keyfile    = /home/1234567/ssl/blubber_private_key.pem

 

listeners.ssl.default     = 5671

ssl_options.cacertfile    = /home/1234567/ssl/all_cacerts.pem

ssl_options.certfile      = /home/1234567/ssl/blubber_ssl_certificate.pem

ssl_options.keyfile       = /home/1234567/ssl/blubber_private_key.pem

 

 

 

Das cert- und das key-File bekommt man via LetEncrypt und die Pfad zu diesen Dateien müssen bereits in den virtual-hosts Dateien von Apache stehen. Schwieriger wird dann die Erstellung der allcerts Datei:

 

cat /etc/ssl/certs/* > /home/1234567/ssl/all_cacerts.pem

 

 

andere beschreiben eine mögliche Erstellung hier:

•https://curl.se/docs/caextract.html

•http://www.cacert.org/index.php?id=3

SSL/TLS Lets Encrypt

Hier eine bessere Methode:

Die Zertifikate werden dupliziert für RabbitMQ durch Nachläufe bei Lets Encrypt bei der Zertifikatsbearbeitung:

Zuerst müssen die Ablegepfade für rabbitmq für ssl-Daten gesetzt werden. Das geschieht wie folgt:

 

sudo mkdir -p /etc/rabbitmq/ssl

sudo chown root:rabbitmq /etc/rabbitmq/ssl

sudo chmod 750 /etc/rabbitmq/ssl

 

 

Dann legen wir einen renewal-hook (Dateiname "rabbitmq.sh" unter "/etc/letsencrypt/renewal-hooks/deploy") an, mit dem wir die notwendigen Dateien bei Zertifikatsbearbeitungen an den obigen Ort kopieren:

 

#!/bin/bash

set -euo pipefail

 

RABBITMQ_DOMAIN="domain.de"

DST="/etc/rabbitmq/ssl"

 

# Nur aktiv werden, wenn die relevante Domain in diesem Renewal steckt

if [[ " $RENEWED_DOMAINS " != *" $RABBITMQ_DOMAIN "* ]]; then

    exit 0

fi

 

cp "$RENEWED_LINEAGE/fullchain.pem" "$DST/cert.pem"

cp "$RENEWED_LINEAGE/privkey.pem"   "$DST/key.pem"

cp "$RENEWED_LINEAGE/chain.pem"     "$DST/ca.pem"

 

 

# chown root:rabbitmq "$DST"/*.pem

chmod 640 "$DST"/*.pem

 

rabbitmqctl eval 'ssl:clear_pem_cache().'

 

 

und machen es ausführbar:

 

sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/rabbitmq.sh

 

 

Und wir testen den deploy-hook Script auf Funktion via (die Dateien müssen aktuelles Datum besitzen und das Datum des Zertifikats sollte auch dem aktuellen Zeitstempel entsprechen):

 

sudo certbot renew --force-renewal

sudo ls -la /etc/rabbitmq/ssl/

sudo openssl x509 -in /etc/rabbitmq/ssl/cert.pem -noout -dates

 

 

In der Konfigurationsdatei ("/etc/rabbitmq/rabbitmq.conf") müssen dann die folgenden Einträge angelegt werden:

 

ssl_options.certfile   = /etc/rabbitmq/ssl/cert.pem

ssl_options.keyfile    = /etc/rabbitmq/ssl/key.pem

ssl_options.cacertfile = /etc/rabbitmq/ssl/ca.pem

 

 

Hinweis: Dieses Verfahren ist nur sinnvoll, wenn wir nur eingehende Aufrufe testen wollen. Wenn RabbitMQ selbst TLS-Verbindungen zu fremden Servern aufbauen möchte, dann muß das cacert File umfassender (s.o.) aufgebaut werden.