RabbitMQ Shovel из-за ошибок TLS с плохим соответствием после обновления сертификатов

Моя установка RabbitMQ работает уже более года с использованием лопат, подключенных к TLS. Лопаты работали с самоподписанными сертификатами до истечения срока их действия. Когда я воссоздал новые сертификаты, лопаты по-прежнему не будут работать, хотя я поместил сертификаты, ключи и сертификаты ЦС в те же места, что и предыдущие. Ошибки, которые я получаю, похожи на эти (из [email protected] - длинные строки были «продолжены» с \ ):

=SUPERVISOR REPORT==== 31-Jul-2019::15:52:59 ===
 Supervisor: {<0.879.0>,rabbit_shovel_dyn_worker_sup}
 Context:    child_terminated
 Reason:     {{badmatch,{error,closed}},
              [{rabbit_shovel_worker,make_conn_and_chan,1,
                   [{file,"src/rabbit_shovel_worker.erl"},{line,236}]},
               {rabbit_shovel_worker,handle_cast,2,
                   [{file,"src/rabbit_shovel_worker.erl"},{line,62}]},
               {gen_server2,handle_msg,2,
                   [{file,"src/gen_server2.erl"},{line,1049}]},
               {proc_lib,init_p_do_apply,3,
                   [{file,"proc_lib.erl"},{line,240}]}]}
 Offender:   [{pid,<0.14768.3>},
              {name,{<<"/">>,<<"Pull Light Data">>}},
              {mfargs,
                  {rabbit_shovel_worker,start_link,
                      [dynamic,
                       {<<"/">>,<<"Pull Light Data">>},
                       [{<<"src-uri">>,
                         <<"amqps://TLS_user:MWP3wCHKMNqGbnJrwKN3@source:5673 \
                         ?cacertfile=/etc/pki/rmqca/source_rmq_cacert.pem \ 
                         &certfile=/etc/pki/rmqclient/source_client_cert.pem \
                         &keyfile=/etc/pki/rmqclient/source_client_key.pem \
                         &verify=verify_peer&server_name_indication=source">>},
                        {<<"src-exchange">>,<<"Data.E.source">>},
                        {<<"src-exchange-key">>,<<"#">>},
                        {<<"dest-uri">>,
                         <<"amqps://TLS_user:MWP3wCHKMNqGbnJrwKN3@destination:5673 \
                         ?cacertfile=/etc/pki/rmqca/destination_rmq_cacert.pem \
                         &certfile=/etc/pki/rmqclient/destination_client_cert.pem \
                         &keyfile=/etc/pki/rmqclient/destination_client_key.pem \
                         &verify=verify_peer&server_name_indication=rdestination">>},
                        {<<"dest-exchange">>,<<"Data.E.destination">>},
                        {<<"add-forward-headers">>,false},
                        {<<"ack-mode">>,<<"on-confirm">>},
                        {<<"delete-after">>,<<"never">>}]]}},
              {restart_type,{transient,1}},
              {shutdown,4294967295},
              {child_type,worker}]

Мой статус RMQ:

Status of node 'rabbit@destination' ...
[{pid,11710},
{running_applications,
   [{rabbitmq_shovel_management,"Shovel Status","3.6.1"},
    {rabbitmq_shovel,"Data Shovel for RabbitMQ","3.6.1"},
    {rabbitmq_management,"RabbitMQ Management Console","3.6.1"},
    {rabbitmq_management_agent,"RabbitMQ Management Agent","3.6.1"},
    {rabbit,"RabbitMQ","3.6.1"},
    {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.1"},
    {webmachine,"webmachine","1.10.3"},
    {mochiweb,"MochiMedia Web Server","2.13.0"},
    {amqp_client,"RabbitMQ AMQP Client","3.6.1"},
    {xmerl,"XML parser","1.3.9"},
    {rabbit_common,[],"3.6.1"},
    {compiler,"ERTS  CXC 138 10","6.0.2"},
    {ssl,"Erlang/OTP SSL application","7.2"},
    {public_key,"Public key infrastructure","1.1"},
    {crypto,"CRYPTO","3.6.2"},
    {os_mon,"CPO  CXC 138 46","2.4"},
    {mnesia,"MNESIA  CXC 138 12","4.13.2"},
    {ranch,"Socket acceptor pool for TCP protocols.","1.2.1"},
    {asn1,"The Erlang ASN1 compiler version 4.0.1","4.0.1"},
    {inets,"INETS  CXC 138 49","6.1"},
    {syntax_tools,"Syntax tools","1.7"},
    {sasl,"SASL  CXC 138 11","2.6.1"},
    {stdlib,"ERTS  CXC 138 10","2.7"},
    {kernel,"ERTS  CXC 138 10","4.1.1"}]},
{os,{unix,linux}},
{erlang_version,
   "Erlang/OTP 18 [erts-7.2] [source] [64-bit] [smp:4:4] [async-threads:64] [hipe] [kernel-poll:true]\n"},
{memory,
   [{total,102477624},
    {connection_readers,978264},
    {connection_writers,214256},
    {connection_channels,252872},
    {connection_other,1444608},
    {queue_procs,4690544},
    {queue_slave_procs,0},
    {plugins,805496},
    {other_proc,21533200},
    {mnesia,496176},
    {mgmt_db,2570432},
    {msg_index,979048},
    {other_ets,2654936},
    {binary,30328624},
    {code,27425521},
    {atom,992409},
    {other_system,7111238}]},
{alarms,[]},
{listeners,
   [{clustering,25672,"::"},
    {amqp,5672,"0.0.0.0"},
    {'amqp/ssl',5673,"0.0.0.0"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,1661373644},
{disk_free_limit,50000000},
{disk_free,1504694272},
{file_descriptors,
   [{total_limit,924},
    {total_used,112},
    {sockets_limit,829},
    {sockets_used,37}]},
{processes,[{limit,1048576},{used,814}]},
{run_queue,0},
{uptime,3664},
{kernel,{net_ticktime,60}}]

person JohnG    schedule 31.07.2019    source источник
comment
Вы перезапустили RabbitMQ после замены файлов сертификатов? К вашему сведению, ваши версии RabbitMQ и Erlang очень устарели.   -  person Luke Bakken    schedule 01.08.2019
comment
Да, я перезапустил RabbitMQ, а затем и сервер, чтобы убедиться, что он правильно подхватывает конфигурацию. Я обновлю программное обеспечение, если смогу, но сомневаюсь, что это причина этой проблемы.   -  person JohnG    schedule 01.08.2019
comment
Некоторая дополнительная информация: я могу запустить s_server и s_client, используя указанные пути сертификатов, и установить соединение на этом сервере без каких-либо ошибок. Я проверил сертификат и закрытый ключ, используя этой страницы, и они совпадают.   -  person JohnG    schedule 01.08.2019


Ответы (1)


Проблема оказалась в неправильной настройке самого сервиса RabbitMQ. В файле конфигурации /etc/rabbitmq/rabbitmq.config есть раздел SSL:

   %% Configuring SSL.
   %% See http://www.rabbitmq.com/ssl.html for full documentation.
   %%
   {ssl, [{versions, ['tlsv1.2', 'tlsv1.1']}]},
   {ssl_options, [{cacertfile,           "/etc/pki/rmq_cacert.pem"},
                  {certfile,             "/etc/pki/rmqserver/server_cert.pem"},
                  {keyfile,              "/etc/pki/rmqserver/server_key.pem"},
                  {versions,   ['tlsv1.2', 'tlsv1.1']},
                  {verify,               verify_peer},
                  {fail_if_no_peer_cert, false}]} 

Обратите внимание на строку файла cacert (/etc/pki/rmq_cacert.pem). Это неправильное место для моей установки: у меня есть каталог с именем rmqca для сертификатов CA (следуя этому соглашению, мои серверные сертификаты на стороне сайта находятся в rmqserver/, а мои клиентские сертификаты — в rmqclient/ ). Новая строка:

  {ssl_options, [{cacertfile,           "/etc/pki/rmqca/rmq_cacert.pem"},

и после перезапуска службы все хорошо.

Спасибо всем за внимание. Я надеюсь, что этот ответ поможет кому-то еще с этим загадочным сообщением об ошибке.

person JohnG    schedule 07.08.2019