如何通过 Docker Compose 在 RabbitMQ 上使用 SSL?

问题描述 投票:0回答:3

我正在 Docker 上使用这个 docker-compose.yml 运行 RabbitMQ 实例,没有问题,它正在工作:

version: '3.7'
services:
  my-rabbit:
    image: imageAddress
    hostname: my-rabbit
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - testNetwork
networks:
  testNetwork:
    external: true

但是我必须使用带有证书的 RabbitMQ 才能通过 TLS 获得连接。

我尝试了这种方式,certs 文件夹包含证书,但出现错误:

version: '3.7'
services:
  my-rabbit:
    tty: true
    image: imageAddress
    environment:
      - RABBITMQ_SSL_CERTFILE=/cert_rabbitmq/testca/cacert.pem
      - RABBITMQ_SSL_KEYFILE=/cert_rabbitmq/server/cert.pem
      - RABBITMQ_SSL_CACERTFILE=/cert_rabbitmq/server/key.pem
    hostname: my-rabbit
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - /home/ilkaygunel/Desktop/certs:/cert_rabbitmq
    networks:
      - testNetwork
networks:
  testNetwork:
    external: true

错误如下。它说旧式配置文件存在,但我不知道该怎么办。

my-rabbit_1  | error: Docker configuration environment variables specified, but old-style (Erlang syntax) configuration file '/etc/rabbitmq/rabbitmq.config' exists
my-rabbit_1  |   Suggested fixes: (choose one)
my-rabbit_1  |    - remove '/etc/rabbitmq/rabbitmq.config'
my-rabbit_1  |    - remove any Docker-specific 'RABBITMQ_...' environment variables
my-rabbit_1  |    - convert '/etc/rabbitmq/rabbitmq.config' to the newer sysctl format ('/etc/rabbitmq/rabbitmq.conf'); see https://www.rabbitmq.com/configure.html#config-file

我应该怎么做才能使用该证书文件?

docker ssl rabbitmq
3个回答
1
投票

看起来

RABBITMQ_SSL*
envs 已被弃用,这个解决方案对我有用,创建 你自己的证书
rabbitmq.conf
其中包含这样的 tls 配置:

目录结构:

├── certs
│   ├── rabbitmq.conf
│   ├── root.crt
│   ├── server.crt
│   └── server.key
├── data
│   └── # rmq data and other stuff
└── docker-compose.yml

docker-compose.yml

version: "3.8"
services:
  tls-rabbitmq:
    hostname: 'tls-dev.rmq'
    image: rabbitmq:3-management-alpine
    container_name: 'tls-rmq-dev'
    environment:
      - RABBITMQ_DEFAULT_USER=rmq-test
      - RABBITMQ_DEFAULT_PASS=Wg1-U5hP8xEYY_zfMPFEb5l-HvrsH
    restart: always
    extra_hosts:
      - "tls-dev.rmq:192.168.166.6"
    ports:
        - "5672:5672"
        - "15672:15672"
    volumes:
      - ./data:/var/lib/rabbitmq/
      - ./certs/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro
      - ./certs/root.crt:/etc/ssl/rmq-cacert.pem:ro
      - ./certs/server.crt:/etc/ssl/rmq-cert.pem:ro
      - ./certs/server.key:/etc/ssl/rmq-key.pem:ro

rabbitmq.conf

ssl_options.cacertfile           = /etc/ssl/rmq-cacert.pem
ssl_options.certfile             = /etc/ssl/rmq-cert.pem
ssl_options.keyfile              = /etc/ssl/rmq-key.pem
ssl_options.verify               = verify_peer
ssl_options.fail_if_no_peer_cert = true

最后,

docker-compose up -d
,你就可以出发了。

P.S:记得将

tls-dev.rmq
地址添加到您的
/etc/hosts
并传递服务器IP地址,使用您的客户端证书连接到您的rabbitmq。


0
投票

尝试这样的事情。另外,您似乎指向了错误的文件。 certfile 应为

cert.pem
,密钥文件应为
key.pem
,cacertfile 应为
cacert

或者如果你想像你一样使用 3.7,它应该是 :-

version: '3.7'
services:
  my-rabbit:
    tty: true
    image: imageAddress
    environment:
      - RABBITMQ_SSL_CERTFILE=/cert_rabbitmq/testca/cert.pem
      - RABBITMQ_SSL_KEYFILE=/cert_rabbitmq/server/key.pem
      - RABBITMQ_SSL_CACERTFILE=/cert_rabbitmq/server/cacert.pem
    hostname: my-rabbit
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - /home/ilkaygunel/Desktop/certs:/cert_rabbitmq
    networks:
      - testNetwork
networks:
  testNetwork:
    external: true

或者,只需使用新格式设置一个rabbitmq配置文件,如下所示:-

#A new style format snippet. This format is used by rabbitmq.conf files.
ssl_options.cacertfile           = /path/to/ca_certificate.pem
ssl_options.certfile             = /path/to/server_certificate.pem
ssl_options.keyfile              = /path/to/server_key.pem
ssl_options.verify               = verify_peer
ssl_options.fail_if_no_peer_cert = true

从文档看来,使用这种配置格式,您甚至可能不需要在 docker compose 文件中使用 RABBITMQ... 样式环境变量。


0
投票

可能您使用的是 3.7.0 之前版本的rabbitmq 镜像,其中默认使用旧式配置文件

如果有一个选项,您可能希望将rabbitmq 映像的版本升级到较新的版本。处理新 ini 样式配置文件的较新版本的图像。此升级是错误消息中的第三个建议:“将 '/etc/rabbitmq/rabbitmq.config' 转换为较新的 sysctl 格式”。

还有一点。当您指定“RABBITMQ_SSL_...”变量时,rabbitmq 将打开由 tls 驱动的端口 5671; 5672 也可以打开,但没有 tls。此行为可能会通过 conf 文件更改。

© www.soinside.com 2019 - 2024. All rights reserved.