Rabbitmq: SSL authentication with docker compose.

Created on 17 Oct 2016  路  2Comments  路  Source: docker-library/rabbitmq

Hello.

I'm trying to run a rabbitmq container from docker compose with ssl authentication.

Here is my docker.compose.yml

version: '2'
services:
  rabbitmq:
    tty: true
    hostname: my-rabbit
    ports:
      - "15672:15672"
      - "15671:15671"
      - "5672:5672"
      - "5671:5671"
    image: rabbitmq:3-management
    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
      - RABBITMQ_DEFAULT_USER=user
      - RABBITMQ_DEFAULT_PASS=password
    volumes:
      - ./cert_rabbitmq:/cert_rabbitmq

  client:
    tty: true
    image: debian:jessie
    command: bash
    volumes:
      - ./cert_rabbitmq:/cert_rabbitmq

When I start my containers with docker-compose up, I get the following log that seems correct to me (I removed 'Statistics garbage collector' lines to keep it shorter)

rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:58 ===
rabbitmq_1  | Starting RabbitMQ 3.6.5 on Erlang 19.0.7
rabbitmq_1  | Copyright (C) 2007-2016 Pivotal Software, Inc.
rabbitmq_1  | Licensed under the MPL.  See http://www.rabbitmq.com/
rabbitmq_1  | 
rabbitmq_1  |               RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
rabbitmq_1  |   ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
rabbitmq_1  |   ##  ##
rabbitmq_1  |   ##########  Logs: tty
rabbitmq_1  |   ######  ##        tty
rabbitmq_1  |   ##########
rabbitmq_1  |               Starting broker...
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:58 ===
rabbitmq_1  | node           : rabbit@my-rabbit
rabbitmq_1  | home dir       : /var/lib/rabbitmq
rabbitmq_1  | config file(s) : /etc/rabbitmq/rabbitmq.config
rabbitmq_1  | cookie hash    : kqHJWQpPpNUEv7vcY+Qneg==
rabbitmq_1  | log            : tty
rabbitmq_1  | sasl log       : tty
rabbitmq_1  | database dir   : /var/lib/rabbitmq/mnesia/rabbit@my-rabbit
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Memory limit set to 6338MB of 15846MB total.
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Disk free limit set to 50MB
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Limiting to approx 65436 file handles (58890 sockets)
rabbitmq_1  | 
rabbitmq_1  | =INFO REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | FHC read buffering:  OFF
rabbitmq_1  | FHC write buffering: ON
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Priority queues enabled, real BQ is rabbit_variable_queue
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Management plugin: using rates mode 'basic'
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | msg_store_transient: using rabbit_msg_store_ets_index to provide index
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | msg_store_persistent: using rabbit_msg_store_ets_index to provide index
rabbitmq_1  | NG REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | msg_store_persistent: rebuilding indices from scratch
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | started SSL Listener on [::]:5671
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Management plugin started. Port: 15671
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Statistics event collector started.
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Statistics channel stats collector started.
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Statistics queue stats collector started.
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Statistics database started.
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Statistics garbage collector started for table aggr_queue_stats_fine_stats with interval 5000.
rabbitmq_1  | ed with 6 plugins.
rabbitmq_1  | REPORT==== 17-Oct-2016::09:34:59 ===
rabbitmq_1  | Statistics garbage collector started for table aggr_queue_exchange_stats_fine_stats with interval 5000.
rabbitmq_1  | 
rabbitmq_1  | =INFO REPORT==== 17-Oct-2016::09:34:59 === startup complete; 6 plugins started.
rabbitmq_1  |  * rabbitmq_management
rabbitmq_1  |  * rabbitmq_web_dispatch
rabbitmq_1  |  * webmachine
rabbitmq_1  |  * mochiweb
rabbitmq_1  |  * rabbitmq_management_agent
rabbitmq_1  |  * amqp_client

But when I try to connect from the client container:

openssl s_client -connect rabbitmq:5671 -cert /cert_rabbitmq/client/cert.pem -key /cert_rabbitmq/client/key.pem -CAfile /cert_rabbitmq/testca/cacert.pem
CONNECTED(00000003)

And no logs on rabbitmq.

And when I try to connect to the managment url, I get an ERR_CONNECTION_RESET and rabbitmq logs are:

rabbitmq_1  | =ERROR REPORT==== 17-Oct-2016::10:16:17 ===
rabbitmq_1  |     application: mochiweb
rabbitmq_1  |     "Accept failed error"
rabbitmq_1  |     "{error,{keyfile,{badmatch,[]}}}"
rabbitmq_1  | 
rabbitmq_1  | =CRASH REPORT==== 17-Oct-2016::10:16:17 ===
rabbitmq_1  |   crasher:
rabbitmq_1  |     initial call: mochiweb_acceptor:init/4
rabbitmq_1  |     pid: <0.4501.0>
rabbitmq_1  |     registered_name: []
rabbitmq_1  |     exception exit: {error,accept_failed}
rabbitmq_1  |       in function  mochiweb_acceptor:init/4 (src/mochiweb_acceptor.erl, line 73)
rabbitmq_1  |     ancestors: [rabbit_web_dispatch_sup_15671,rabbit_web_dispatch_sup,
rabbitmq_1  |                   <0.335.0>]
rabbitmq_1  |     messages: []
rabbitmq_1  |     links: [<0.342.0>]
rabbitmq_1  |     dictionary: []
rabbitmq_1  |     trap_exit: false
rabbitmq_1  |     status: running
rabbitmq_1  |     heap_size: 1598
rabbitmq_1  |     stack_size: 27
rabbitmq_1  |     reductions: 847
rabbitmq_1  |   neighbours:

But if I start the container with
sudo docker run --name rabbitmq --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -e RABBITMQ_SSL_CERT_FILE=/cert_rabbitmq/server/cert.pem -e RABBITMQ_SSL_KEY_FILE=/cert_rabbitmq/server/key.pem -e RABBITMQ_SSL_CA_FILE=/cert_rabbitmq/testca/cacert.pem -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -v /home/user/rabbitmq_docker/cert_rabbitmq:/cert_rabbitmq rabbitmq:3-management

then the container starts with no problem and I can access rabbitmq and the management interface.

Is there something wrong with my setup ? Are there some differences between docker compose and docker run that i'm not aware of ?

Thanks for your answers.

Most helpful comment

@jerryz1982's comment above seems to be spot on. The error says that Mochiweb, the HTTP API server used up to 3.6.6, cannot load the key file.

All 2 comments

  - RABBITMQ_SSL_CERTFILE=/cert_rabbitmq/testca/cacert.pem
  - RABBITMQ_SSL_KEYFILE=/cert_rabbitmq/server/cert.pem
  - RABBITMQ_SSL_CACERTFILE=/cert_rabbitmq/server/key.pem

You pointed to the wrong file. from the file name, i suspect that cacert.pem is cacertfile, cert.pem is cert file and key.pem is keyfile.

@jerryz1982's comment above seems to be spot on. The error says that Mochiweb, the HTTP API server used up to 3.6.6, cannot load the key file.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

aram535 picture aram535  路  4Comments

CVTJNII picture CVTJNII  路  4Comments

CVTJNII picture CVTJNII  路  6Comments

ash9002 picture ash9002  路  5Comments

michaelklishin picture michaelklishin  路  4Comments