|
<< Click to Display Table of Contents >> Navigation: Linux - Ubuntu 24.04 > RabbitMQ > RabbitMQ + HTTPS/TLS |
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
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.