просто предоставлю информацию об окружающей среде перед описанием проблемы:
Windows Server 2016
Сервер RabbitMQ 3.7.5
Erlang TOP 20 (9.1)
OpenSSL 1.10i Light (64-бит) (для преобразования сертификатов в формат .pem)
RabbitMQ "advanced.config":
[ {rabbit, [ {tcp_listeners, [5673]}, {ssl_listeners, [5672]}, {ssl_options, [ {cacertfile,"C:/Users/%USER%/AppData/Roaming/RabbitMQ/cert/cabundle.pem"}, {certfile,"C:/Users/%USER%/AppData/Roaming/RabbitMQ/cert/%MACHINENAME%.pem"}, {keyfile,"C:/Users/%USER%/AppData/Roaming/RabbitMQ/cert/key.pem"}, {password,"%PASSWORD%"}, {verify,verify_none}, {fail_if_no_peer_cert,false}]} ]}, {lager, [ {handlers, [ {lager_file_backend, [{file, "Rabbit.log"}, {level, info}, {size, 10485760}, {count, 15} ]}]} ]} ].
Я сгенерировал сертификат с помощью внутреннего центра сертификации Windows с этим .inf:
[Version] Signature="$Windows NT$" [NEWREQUEST] Subject="CN=%MACHINENAME%.company.com" MachineKeySet = True KeyUsage = 0xA0 KeySpec = 1 KeyLength = 2048 HashAlgorithm = SHA256 Exportable = TRUE ProviderName = "Microsoft RSA SChannel Cryptographic Provider" RequestType = PKCS10 [Extensions] 2.5.29.17 = "{text}" _continue_ = "dns=%MACHINENAME%.company.com" [RequestAttributes] CertificateTemplate= InternalSSLCertificate
Затем я экспортировал файл сертификата в .pfx с закрытым ключом и преобразовал их в формат pem с помощью следующих команд:
Ключевой файл:
openssl pkcs12 -in certificate.pfx -nocerts -out key.pem
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out %machinename%.pem
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out cabundle.pem
Хорошо, сейчас уже присутствует и работает 3 сертификата, когда я проверяю журналы, я вижу следующий вывод в rabbit.log:
2020-03-05 15:32:11.980 [info] @rabbit_reader:mainloop:494 accepting AMQP connection (%SOME IP ADDRESS%:58072 -> %RABBIT MQ SERVER%:5672) 2020-03-05 15:32:11.980 [info] @rabbit_reader:handle_method0:1209 connection (%SOME IP ADDRESS%:58072 -> %RABBIT MQ SERVER%:5672): user '%SOMEUSER%' authenticated and granted access to vhost '/'
Хорошо, когда я изменяю 3 сертификата, описанные в "advanced.config", и перезапускаю службу RabbitMQ, кажется, что ничего не работает.
Из журнала я вижу:
* rabbitmq_management * rabbitmq_web_dispatch * rabbitmq_management_agent
Но после этого ничего не происходит, никаких AMQP подключений.
Общее имя и альтернативное имя субъекта в% MACHINENAME% .pem совпадают, и пароль для key.pem также такой же.
Стоит отметить, что у нас появилась новая инфраструктура PKI (окна). Есть ли у rabbitMQ собственное хранилище доверенных сертификатов, и если да, то как мне доверять своим новым сертификатам?
Или мне что-то еще не хватает?
Я могу попытаться подключиться с этого Linux-сервера (который работает со старыми сертификатами (соединение установлено)), но я получаю этот вывод с новыми сертификатами:
read tcp %IP%:34846->%RABBITMQSERVER%:5672: i/o timeout tap failed with read tcp %IP%:34846->%RABBITMQSERVER%:5672: i/o timeout