Je suis en train de mettre en place un cluster RabbitMQ où il est nécessaire que toutes les communications au sein du cluster soient cryptées.
J'ai suivi le guide à https://www.rabbitmq.com/clustering-ssl.html - crée un fichier avec le certificat et la clé, et transmet les arguments SSL à rabbitmq-server sous forme de variables d'environnement :
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS='-pa /usr/lib/erlang/lib/ssl-7.1/ebin -proto_dist inet_tls -ssl_dist_opt server_certfile /etc/ssl/certs/rabbit.pem'
RABBITMQ_CTL_ERL_ARGS='-pa /usr/lib/erlang/lib/ssl-7.1/ebin -proto_dist inet_tls -ssl_dist_opt server_certfile /etc/ssl/certs/rabbit.pem'
Le serveur démarre correctement et écoute avec TLS activé, mais je ne peux pas lui envoyer de commandes via rabbitmqctl :
# rabbitmqctl status
Status of node rabbit@rabbit01 ...
Error: unable to connect to node rabbit@rabbit01: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@rabbit01]
rabbit@rabbit01:
* connected to epmd (port 4369) on rabbit01
* epmd reports node 'rabbit' running on port 47965
* TCP connection succeeded but Erlang distribution failed
* suggestion: hostname mismatch?
* suggestion: is the cookie set correctly?
* suggestion: is the Erlang distribution using TLS?
Du côté du serveur, je n'obtiens pas grand-chose dans les journaux, si ce n'est des informations totalement inutiles :
=ERROR REPORT==== 30-Dec-2015::13:08:58 ===
SSL: hello: tls_handshake.erl:167:Fatal error: insufficient security
En cherchant un peu, j'ai appris que cela pouvait être dû à une erreur de suite de chiffrement, mais j'ai cru comprendre qu'ils utilisaient tous les deux la même bibliothèque SSL.
La prise en charge de SSL par Erlang est activée, comme vérifié sur la page https://www.rabbitmq.com/troubleshooting-ssl.html et je peux établir une connexion sécurisée avec le certificat grâce aux fonctions s_server et s_client d'openssl.
Je ne sais pas quelle serait la prochaine étape pour résoudre ce problème, et je n'ai pu trouver aucun problème connu autour du clustering - malheureusement, la plupart de la documentation de RabbitMQ concernant TLS est pour le protocole AMQP et non pour le clustering interne.
J'ai également testé l'utilisation d'openSSL pour me connecter à l'instance RabbitMQ en cours d'exécution et j'ai obtenu une erreur très similaire :
# openssl s_client -connect localhost:47965
CONNECTED(00000003)
140004605863584:error:1407742F:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert insufficient security:s23_clnt.c:770:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 295 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
openssl s_client -connect localhost:47965 -tls1_2
CONNECTED(00000003)
140400037775008:error:1409442F:SSL routines:SSL3_READ_BYTES:tlsv1 alert insufficient security:s3_pkt.c:1262:SSL alert number 71
140400037775008:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:598:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1451944018
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---