【问题标题】:Cannot connect to rabbitmq management console when ssl is enabled - centos docker container启用ssl时无法连接到rabbitmq管理控制台-centos docker容器
【发布时间】:2018-12-14 20:03:23
【问题描述】:

我在 docker 容器中安装了 rabbitmq。我使用 centos:latest image 来创建这个容器。我安装rabbitmq的步骤如下,

  1. yum -y update && yum -y install epel-release && yum -y install wget logrotate
  2. wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
  3. rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
  4. yum install rabbitmq-server-3.6.1-1.noarch.rpm
  5. 服务 rabbitmq-server 启动
  6. rabbitmqctl add_user admin admin
  7. rabbitmqctl set_user_tags admin 管理员
  8. rabbitmqctl set_permissions -p / admin "." "." ".*"
  9. rabbitmq-plugins 启用 rabbitmq_management

此时我可以使用 url http://localhost:15672

毫无问题地访问管理控制台

然后我添加了一个自定义配置 /etc/rabbitmq/rabbitmq.config 文件。内容如果该文件如下,

[
{ rabbit, [
    { loopback_users, [ ] },
    { tcp_listeners, [ ] },
    { ssl_listeners, [ 5671 ] },
    { ssl_options, [
        { cacertfile, "/path/to/cacert" },
        { certfile, "/path/to/cert" },
        { fail_if_no_peer_cert, false },
        { keyfile, "/path/to/key" },
        { verify, verify_peer }
    ] },
    { hipe_compile, false }
] },
{ rabbitmq_management, [ { listener, [
    { port, 15672 },
    { ssl, true },
    { ssl_opts, [
        { cacertfile, "/path/to/cacert" },
        { certfile, "/path/to/cert" },
        { keyfile, "/path/to/key.pem" },
        { fail_if_no_peer_cert, false },
        { verify, verify_none }
    ] }
] } ] }
].

然后我重新启动了 rabbitmq-service 并尝试使用 url https://localhost:15672 进行连接。但它没有连接,

rabbitmq 日志文件中有以下错误日志,

=ERROR REPORT==== 6-Jul-2018::07:35:18 ===
application: mochiweb
"Accept failed error"
"{'EXIT',\n    {{function_clause,\n         [{ssl_cipher,hash_algorithm,\"\\b\",\n              [{file,\"ssl_cipher.erl\"},{line,1175}]},\n          {ssl_handshake,'-dec_hello_extensions/2-blc$^0/1-1-',1,\n              [{file,\"ssl_handshake.erl\"},{line,1649}]},\n          {ssl_handshake,'-dec_hello_extensions/2-blc$^0/1-1-',1,\n              [{file,\"ssl_handshake.erl\"},{line,1650}]},\n          {ssl_handshake,dec_hello_extensions,2,\n              [{file,\"ssl_handshake.erl\"},{line,1649}]},\n          {tls_handshake,decode_handshake,3,\n              [{file,\"tls_handshake.erl\"},{line,182}]},\n          {tls_handshake,get_tls_handshake_aux,3,\n              [{file,\"tls_handshake.erl\"},{line,153}]},\n          {tls_connection,next_state,4,\n              [{file,\"tls_connection.erl\"},{line,454}]},\n          {gen_fsm,handle_msg,7,[{file,\"gen_fsm.erl\"},{line,505}]}]},\n     {gen_fsm,sync_send_all_state_event,[<0.500.0>,{start,20000},infinity]}}}"

这个错误的原因是什么?任何想法。提前致谢。

【问题讨论】:

  • 为什么选择 RabbitMQ 3.6.1 版?它很旧,不再支持,当前版本是 3.7.7。此外,您没有提及您是如何安装 Erlang 或您正在使用的 Erlang 版本。

标签: docker rabbitmq erlang centos7


【解决方案1】:

错误{function_clause, [{ssl_cipher,hash_algorithm,"\b", [{file,"ssl_cipher.erl"},{line,1196}]} 的出现是因为Erlang 中旧版本的SSL 应用程序与现代Web 浏览器不兼容。将 Erlang 至少升级到 18.0 版本即可解决此问题。

此问题的 ID 为 OTP-12829,在 release notes 中描述为:

   OTP-12829  Gracefully ignore proprietary hash_sign algorithms

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2020-05-19
    • 2020-08-08
    • 2016-06-28
    • 2015-01-13
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多