BRIDGE API - RabbitMQ
Configurar servidor RabbitMQ para manejar conexiones TLS



© 2024 Napse. Todos los derechos reservados.

REVISIONES

Fecha

Versión

Descripción

Autor

 

1.0Creación del documento
CONTENIDO


1-Alcance

El objetivo del presente documento es detallar los pasos para que un servicio RabbitMQ instalado en un server maneje conexiones TLS, con el objetivo de encriptar el tráfico de la conexión entre el servidor RabbitMQ y las aplicaciones clientes que utilicen los servicios expuestos por dicho servidor.

No está contemplado en este documento la instalación de RabbitMQ ni los utilitarios, sólo se detalla el procedimiento.

2-Referencias

  1. RabbitMQ - TLS Support
  2. RabbitMQ - Troubleshooting TLS-enabled Connections
  3. TLS/SSL Certificate Generator

3-Estado del servidor Rabbit

  • Inicialmente se consultará al servicio rabbit algunos parámetros y estado.
  • Para esto se requiere:
    • loguearse con permisos de administrador en el equipo donde se encuentre instalado el servidor RabbitMQ.
    • desde una consola de comandos, posicionarse en el directorio "sbin" del directorio donde está instalado y ejecutándose RabbitMQ, por ejemplo "C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.4\sbin"
    • una vez en el directorio, ejecutar el comando rabbitmq-diagnostics status

cd "C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.4\sbin"
 
rabbitmq-diagnostics status


  • Como resultado se obtendrá un listado por pantalla con el estado, particularmente tomar nota de la ubicación del archivo de configuración:

Config files
 
* c:/RabbitMQ/rabbitmq.conf


  • Puede ser que no exista archivo de configuración y se estén utilizando las opciones por defecto,  en ese caso bajo "Config Files" no habrá ningún detalle, tomar nota entonces de la ubicación del directorio de trabajo que se muestra bajo "Log files" :

Log file(s)
 
* c:/RabbitMQ/log/rabbit@vm-rabbit.log
* c:/RabbitMQ/log/rabbit@vm-rabbit_upgrade.log


  • Del resultado del comando ejecutado se desprende que el archivo de configuración rabbitmq.conf deberá ser editado, o agregado si no está, en C:\RabbitMQ  (notar que para la separación de directorios en la configuración de rabbit debe utilizarse '/' )
  • Luego ejecutar el comando rabbitmq-diagnostics listeners para ver los ports que está utilizando el servidor rabbit

rabbitmq-diagnostics listeners
Asking node rabbit@vm-rabbit to report its protocol listeners ...
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Interface: 0.0.0.0, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
Interface: 0.0.0.0, port: 15672, protocol: http, purpose: HTTP API


Notar que para el protocolo amqp no figura 'ssl' ni 'tls' y el puerto es el 5672


4-Generación de certificados (opcional)

  • Los certificados pueden ser los mismos que se utilizaron en la aplicación, de todas formas se detalla la forma de generarlos según la documentación de RabbitMQ.
  • Se probó generar certificados en Windows según lo indicado en generación manual de certificados, pero dichos certificados una vez instalados producían que el server cerrara la conexión de los clientes.
  • Se optó por la utilización de la herramienta tls-gen para generar los certificados desde un Linux, con resultado satisfactorio para la conexión de los clientes con el servidor rabbitMQ.
  • La herramienta tls-gen, está indicada para Linux y Mac en generación automatizada de certificados, requiere tener instalados Python 3.6+, make y openSSL
  • En un Linux, por ejemplo CentOs 7, desde línea de comando:

mkdir rabbitCerts
cd rabbitCerts/
$ git clone https://github.com/michaelklishin/tls-gen tls-gen
cd tls-gen/basic
make PASSWORD=Nosotros123
cd result
ls -l
   -rw-rw-r-- 1196 ca_certificate.pem
   -rw-rw-r-- 1834 ca_key.pem
   -rw-rw-r-- 1155 client_certificate.pem
   -rw-rw-r-- 2413 client_key.p12
   -rw-rw-r-- 1858 client_key.pem
   -rw-rw-r-- 1245 server_certificate.pem
   -rw-rw-r-- 2477 server_key.p12
   -rw-rw-r-- 1858 server_key.pem


  • Los certificados quedan en  ~rabbitCerts/tls-gen/basic/result
  • Transferir los certificados del directorio 'result' al servidor donde está instalado RabbitMQ, al directorio dentro de C:\RabbitMQ, por ejemplo C:\RabbitMQ\tlsCerts

5-Archivo de configuración de RabbitMQ

  • Editar o crear el archivo rabbitmq.config, que anteriormente se determinó que se ubicaba por ejemplo en C:\RabbitMQ\rabbitmq.conf , con el siguiente contenido :

  • Nota: Especificar la ruta donde se encuentren los certificados, en caso de que no requiera contraseña quitar {password, "changeit"},


6-Reinicio del servicio RabbitMQ y verificación del estado

  • Reiniciar el servicio RabbitMQ desde la consola de Servicios, o desde modo comando.
  • Luego ejecutar el comando utilizado anteriormente para ver los puertos 'rabbitmq-diagnostics listeners'

rabbitmq-diagnostics listeners
Asking node rabbit@vm-rabbit to report its protocol listeners ...

Interface: [::], port: 15672, protocol: https, purpose: HTTP API over TLS (HTTPS)
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Interface: 0.0.0.0, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Interface: [::], port: 5671, protocol: amqp/ssl, purpose: AMQP 0-9-1 and AMQP 1.0 over TLS
Interface: 0.0.0.0, port: 5671, protocol: amqp/ssl, purpose: AMQP 0-9-1 and AMQP 1.0 over TLS


  • Verificar que ahora para el port 5671 aparece 'amqp/ssl' ... 'over TLS' y la consola de rabbit aparece en el puerto 15672 con https
  • Para verificar solo la consola se puede ingresar a la url usando https


7-Configuración de Rabbit en Bridge Api Central

  • Debemos localizar el archivo de configuración donde se encuentra instalado Bridge Api. Por ejemplo: C:/napse/bridge/api-central/config y modificar la configuración de rabbit y debe quedar de la siguiente manera:


  • url: debe especificarse el protocolo 'amqps'(se agrega una 's' al final) y especificar el puerto 5671(ver imagen)
  • isSssl: true

8-Reinicio del servicio de Bridge Api Central y verificación del la conexión con RabbitMQ

  • Reiniciar el servicio de Bridge Api Central desde la consola de Servicios, o desde modo comando.
  • Una vez que Api levante se podrá verificar en la consola de Rabbit las conexiones que se encuentran:



  • Sem rótulos