RabbitMQ TLS 集群 - “安全性不足”

RabbitMQ TLS 集群 - “安全性不足”

我目前正在设置一个 RabbitMQ 集群,要求集群内的所有通信都必须加密。

我按照指南进行操作https://www.rabbitmq.com/clustering-ssl.html- 使用证书和密钥创建一个文件,并将 SSL 参数作为环境变量传递给 rabbitmq-server:

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'

服务器启动正常并在启用 TLS 的情况下进行监听,但我无法通过 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?

在服务器端,除了完全无用的日志之外,我没有在日志中得到太多信息:

=ERROR REPORT==== 30-Dec-2015::13:08:58 ===
SSL: hello: tls_handshake.erl:167:Fatal error: insufficient security

经过一番搜索,我们发现这可能是由于密码套件不匹配造成的,但我的理解是它们都使用相同的 SSL 库。

Erlang 已启用 SSL 支持,已选中https://www.rabbitmq.com/troubleshooting-ssl.html,并且我可以使用 openssl 的 s_server 和 s_client 与证书建立安全连接。

我不确定下一步该怎么做才能解决这个问题,而且在集群方面也找不到任何已知问题 - 不幸的是,RabbitMQ 关于 TLS 的大部分文档都是针对 AMQP 协议的,而不是针对内部集群的。


我已经测试使用 openSSL 连接到正在运行的 RabbitMQ 实例,并收到非常类似的错误:

# 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)
---

答案1

这可能是由于密码套件或 TLS 版本不匹配(例如,客户端仅限于 TLSv1,但 RabbitMQ 配置为需要 TLSv1.2),但也可能是由于证书中微妙的密钥使用字段。后者特别难以注意。

参见[1][2][3][4][5]。

  1. https://www.rabbitmq.com/troubleshooting-ssl.html
  2. https://www.rabbitmq.com/ssl.html#tls-versions
  3. https://www.rabbitmq.com/ssl.html#cipher-suites
  4. https://www.rabbitmq.com/ssl.html#tls-evaluation-tools
  5. https://www.rabbitmq.com/ssl.html#key-usage

相关内容