RabbitMQ + TLS:ssl_upgrade_error

时间:2015-12-08 22:27:43

标签: ssl rabbitmq rabbitmqctl

按照here所述的说明,我设置了一个证书颁发机构,并使用相应的字段创建了rabbitmq.config。但是,当我尝试使用

连接到RabbitMQ服务器时
openssl s_client -connect 127.0.0.1:5671 -tls1

我在标准输出中得到以下内容:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1449612785
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

我在日志中看到以下错误:

=ERROR REPORT==== 8-Dec-2015::16:13:10 ===
Error on AMQP connection <0.257.0>:
{ssl_upgrade_error,
    {options,
        {cacertfile,"/home/nthompson/learn_celery/testca/cacert.pem",
            {error,eacces}}}}

可能是什么问题?

我尝试过以下操作,但没有成功:

  • 打开cacert.pem的权限,即我运行了chmod 444 cacert.pem以及一些更无望的权限,没有骰子。

  • 验证所有中间目录都具有775的权限。

  • 验证RabbitMQ服务器确实正在侦听端口5671,它是:

    $ sudo rabbitmq status
    {listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{'amqp/ssl',5671,"::"}]},
    
  • 选中rabbitmq.config中的所有路径,并通过设置{verify,verify_none}{fail_if_no_peer_cert,false}来放宽证书交换政策。

  • 通过

    启用rabbitmq_auth_mechanism_ssl插件
    $ sudo rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl
    

    并验证它已被rabbitmq-server提取。此外,我将{auth_mechanisms, ['PLAIN', 'AMQPLAIN', 'EXTERNAL']}添加到rabbitmq.config

  • RabbitMQ版本是3.5.4(默认apt-get),但我也升级到3.5.6(最新版)以查看是否会消失。

1 个答案:

答案 0 :(得分:0)

经过大量的捣乱和搜索后我终于明白了!

就我而言,问题是由认证文件的所有权和权限引起的。

我编辑了我的/etc/rabbitmq/rabbitmq.config,以便证书,密钥和CAfile指向/etc/rabbitmq/conf/<file>.pem,复制了.pem中的原始/etc/rabbitmq/conf/文件,然后是chown -R rabbitmq:rabbitmq /etc/rabbitmq/conf和重新启动了服务service rabbitmq-server restart,它运作良好。