2017-01-19 5 views
2

Я работаю с Windows Server 2012, Erlang 19.2 и RabbitMq 3.6.6. У меня возникли проблемы с настройкой соединения между конечными точками с использованием TLS. Я пробовал каждый ответ на SO, а также все документы RabbitMq here и here. Не уверен, что мы делаем неправильно.RabbitMq и «Fatal error: handshake failure - handshake_decode_error»

В troubleshooting link here все тесты проходят за исключением «попытка подключения SSL к брокеру». Вот в чем проблема, и я не уверен, почему.

Когда я просматриваю документацию по устранению неполадок, чтобы узнать, можете ли вы получить одноранговое соединение через SSL на порт 8443, он отлично работает. Затем попытка подключения к брокеру на порту 5671 терпит неудачу, сказав плохое рукопожатие.

Включение файла RabbitMQ конфигурации в 8443 ничего не делает, кроме сделать одноранговой работы на 5671 и потерпеть неудачу на 8443.

Мой конфигурационный файл:

[ 
    {rabbit, [ 
    {ssl_listeners, [5671]}, 
    {ssl_options, [{cacertfile,"C:\\rabbitcerts\\testca\\cacert.pem"}, 
        {certfile,"C:\\rabbitcerts\\server\\cert.pem"}, 
        {keyfile,"C:\\rabbitcerts\\server\\key.pem"}, 
        {depth, 2}, 
        {verify,verify_peer}, 
        {fail_if_no_peer_cert,false}]} 
    ]} 
]. 

Выполнение этой команды:

c:\rabbitcerts>openssl s_client -connect localhost:5671 -cert client/cert.pem -key client/key.pem -CAfile testca/cacert.pem

Производит эту ошибку:

Loading 'screen' into random state - done 
CONNECTED(000001BC) 
write:errno=10054 

И в лог-файл:

=INFO REPORT==== 19-Jan-2017::16:42:50 === 
Memory limit set to 716MB of 1791MB total. 

=INFO REPORT==== 19-Jan-2017::16:42:50 === 
Disk free limit set to 50MB 

=INFO REPORT==== 19-Jan-2017::16:42:50 === 
Limiting to approx 8092 file handles (7280 sockets) 

=INFO REPORT==== 19-Jan-2017::16:42:50 === 
FHC read buffering: OFF 
FHC write buffering: ON 

=INFO REPORT==== 19-Jan-2017::16:42:50 === 
Priority queues enabled, real BQ is rabbit_variable_queue 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Starting rabbit_node_monitor 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Management plugin: using rates mode 'basic' 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
msg_store_transient: using rabbit_msg_store_ets_index to provide index 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
msg_store_persistent: using rabbit_msg_store_ets_index to provide index 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
started TCP Listener on [::]:5672 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
started TCP Listener on 0.0.0.0:5672 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
started SSL Listener on [::]:5671 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
started SSL Listener on 0.0.0.0:5671 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Management plugin started. Port: 15672 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics event collector started. 

... 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics database started. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_queue_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_queue_stats_deliver_get with interval 5000. 

... 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_queue_exchange_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_vhost_stats_deliver_get with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_vhost_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_vhost_stats_queue_msg_rates with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_vhost_stats_queue_msg_counts with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_vhost_stats_coarse_conn_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_queue_stats_deliver_get with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_queue_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_queue_stats_queue_msg_counts with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_stats_deliver_get with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_stats_queue_msg_counts with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_stats_process_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_exchange_stats_deliver_get with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_channel_exchange_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_exchange_stats_fine_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table aggr_node_stats_coarse_node_stats with interval 5000. 

... 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Statistics garbage collector started for table connection_stats with interval 5000. 

=INFO REPORT==== 19-Jan-2017::16:42:51 === 
Server startup complete; 6 plugins started. 
* rabbitmq_management 
* rabbitmq_web_dispatch 
* webmachine 
* mochiweb 
* rabbitmq_management_agent 
* amqp_client 

=ERROR REPORT==== 19-Jan-2017::16:54:39 === 
SSL: hello: tls_handshake.erl:202:Fatal error: handshake failure - handshake_decode_error 

Что на Земле я не хватает?

Я добрался до сетевого администратора, чтобы узнать, есть ли на сервере какая-либо конфигурация, которая может отсутствовать, за это answer on SO, но я хотел бы услышать от других, так как я уверен, что могу «т быть только один испытывающим проблемы ...

UPDATE

оказывается, я все ближе, используя новую команду @jww.

openssl s_client -connect mymachine:5671 -tls1 -servername mymachine

Выход:

Loading 'screen' into random state - done 
CONNECTED(000001BC) 
depth=1 /CN=MyTestCA 
verify error:num=19:self signed certificate in certificate chain 
verify return:0 
--- 
Certificate chain 
0 s:/CN=$(hostname)/O=server 
    i:/CN=MyTestCA 
1 s:/CN=MyTestCA 
    i:/CN=MyTestCA 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIC5DCCAcygAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhNeVRl 
c3RDQTAeFw0xNzAxMTkxNjA1NDhaFw0xODAxMTkxNjA1NDhaMCcxFDASBgNVBAMU 
CyQoaG9zdG5hbWUpMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUA 
A4IBDwAwggEKAoIBAQC1WnL4V7VWwi9EytZT1UTR3ixQcXwCSWDe3aS8yk1KFadL 
1ZPBgj3ZYDs/NwDX/KJ/d31yCgpwl/ZS6lWjn2Ect7BfHwKHd98L5SVl9Na2TPUP 
73kLdITDYvJbACoQu+JT60CNPBXsTPww2L2OpFYUhDSXGwV721Y5rcaU9a2VPzjp 
N0puT8qdxMmOz7Zp2WAjmkmSRpbOz2Z3/BbVI9zPMYLenmOeoLDOpM2vGqeLRSy1 
ruBd7Rw3gFKvYN/flXZyfZkqrY5FOju6okp6n9KvnibnmgATS1OuSmADFS78x0Zz 
XM7Cep23b4Ix+ckB4PzpAwRKsiWv534veN1lK42hAgMBAAGjLzAtMAkGA1UdEwQC 
MAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB 
CwUAA4IBAQBolBD+sy7H1SdtgGsS45eYp1zSEPlOEZLZhmCsN4zN4rG0Qo6SGEvd 
cODk3hIWfglgb50oouGGebE84ReTSLQvFp9eGoIokB8azy2l25weZPvyPjjkdBiF 
/XI3Wn/oJaRX9t2nnMZjQE14W22KqwGewMh0PywdLcjV6llqmFzZAQv6GTIvyOZw 
QqCZjanYXGtyi3QSK6D1MxBaDW7hg4/WaUkNEhKVEQ6Vm3EvnvGVD6XZVP7RM7Iy 
oN7wXuGlasoBx7Zs5sJh1/uNYyN2QHYKu8z5tLgXACzA9phNLeOGaimxIZIUAjnJ 
IY08bwLeo/hbDKNA3hvyQlgSpy7t2U4o 
-----END CERTIFICATE----- 
subject=/CN=$(hostname)/O=server 
issuer=/CN=MyTestCA 
--- 
Acceptable client certificate CA names 
/CN=MyTestCA 
--- 
SSL handshake has read 1659 bytes and written 453 bytes 
--- 
New, TLSv1/SSLv3, Cipher is AES256-SHA 
Server public key is 2048 bit 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : AES256-SHA 
    Session-ID: 0E00F18E516DBD5C7EE7F7FE070BDC09FBE3B731FA8D1DF2ECD75E455BB8A6EF 
    Session-ID-ctx: 
    Master-Key: 61F018A5B629EE6015F88B076AEA8765E153A8CCB2241766DFD0BCC369DC703C9BF42249E47C93EEA318899615732390 
    Key-Arg : None 
    Start Time: 1484872012 
    Timeout : 7200 (sec) 
    Verify return code: 19 (self signed certificate in certificate chain) 
--- 
closed 
+0

Это среда разработки или производства? –

+0

@AlexBuyny dev. – ragerory

+0

@jww Я отправил команду 's_client', которую я использую. В среде разработчиков и с брокером на одной машине он должен работать нормально, согласно любому другому документу - эта статья находится в предположении, что она находится за сетью. – ragerory

ответ

2

В этом конкретном случае все было правильно настроено.Однако при создании однорангового соединения в консоли RabbitMq для устранения неполадок он создает соединение по другому протоколу, чем при попытке подключения к брокеру.

Так, где это не сработало:

openssl s_client -connect localhost:5671 -cert client/cert.pem -key client/key.pem -CAfile testca/cacert.pem

Я добавил -tls1 к аргументам, на другой рекомендации @ jww, и это было все, что мне нужно, чтобы создать защищенное соединение.

openssl s_client -connect localhost:5671 -tls1 -cert client/cert.pem -key client/key.pem -CAfile testca/cacert.pem

Результатом является Verify code: (ok).

Loading 'screen' into random state - done 
CONNECTED(000001BC) 
depth=1 /CN=MyTestCA 
verify return:1 
depth=0 /CN=$(hostname)/O=server 
verify return:1 
--- 
Certificate chain 
0 s:/CN=$(hostname)/O=server 
    i:/CN=MyTestCA 
1 s:/CN=MyTestCA 
    i:/CN=MyTestCA 
--- 
Server certificate 
-----BEGIN CERTIFICATE----- 
MIIC5DCCAcygAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhNeVRl 
c3RDQTAeFw0xNzAxMTkxNjA1NDhaFw0xODAxMTkxNjA1NDhaMCcxFDASBgNVBAMU 
CyQoaG9zdG5hbWUpMQ8wDQYDVQQKEwZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUA 
A4IBDwAwggEKAoIBAQC1WnL4V7VWwi9EytZT1UTR3ixQcXwCSWDe3aS8yk1KFadL 
1ZPBgj3ZYDs/NwDX/KJ/d31yCgpwl/ZS6lWjn2Ect7BfHwKHd98L5SVl9Na2TPUP 
73kLdITDYvJbACoQu+JT60CNPBXsTPww2L2OpFYUhDSXGwV721Y5rcaU9a2VPzjp 
N0puT8qdxMmOz7Zp2WAjmkmSRpbOz2Z3/BbVI9zPMYLenmOeoLDOpM2vGqeLRSy1 
ruBd7Rw3gFKvYN/flXZyfZkqrY5FOju6okp6n9KvnibnmgATS1OuSmADFS78x0Zz 
XM7Cep23b4Ix+ckB4PzpAwRKsiWv534veN1lK42hAgMBAAGjLzAtMAkGA1UdEwQC 
MAAwCwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB 
CwUAA4IBAQBolBD+sy7H1SdtgGsS45eYp1zSEPlOEZLZhmCsN4zN4rG0Qo6SGEvd 
cODk3hIWfglgb50oouGGebE84ReTSLQvFp9eGoIokB8azy2l25weZPvyPjjkdBiF 
/XI3Wn/oJaRX9t2nnMZjQE14W22KqwGewMh0PywdLcjV6llqmFzZAQv6GTIvyOZw 
QqCZjanYXGtyi3QSK6D1MxBaDW7hg4/WaUkNEhKVEQ6Vm3EvnvGVD6XZVP7RM7Iy 
oN7wXuGlasoBx7Zs5sJh1/uNYyN2QHYKu8z5tLgXACzA9phNLeOGaimxIZIUAjnJ 
IY08bwLeo/hbDKNA3hvyQlgSpy7t2U4o 
-----END CERTIFICATE----- 
subject=/CN=$(hostname)/O=server 
issuer=/CN=MyTestCA 
--- 
Acceptable client certificate CA names 
/CN=MyTestCA 
--- 
SSL handshake has read 1659 bytes and written 2163 bytes 
--- 
New, TLSv1/SSLv3, Cipher is AES256-SHA 
Server public key is 2048 bit 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : AES256-SHA 
    Session-ID: 56CC3AB350BF91DB4CD2A89F62FD60322E553628C381E11B179BD9C8D22184BF 
    Session-ID-ctx: 
    Master-Key: 6FB8A241FD0A5C3ECCBE88DE4C36C412CBE5E8D58DAAB209D24438F72CCA7F9332511A277EBC0919775490057F46CCC7 
    Key-Arg : None 
    Start Time: 1484921846 
    Timeout : 7200 (sec) 
    Verify return code: 0 (ok) 
+0

Вы должны, вероятно, обеспечить SNI с '-servename' при устранении неполадок с помощью' s_client'. Он не нужен для dev-машин, но определенно необходим в средах с общим хостингом. Вы знаете, поддерживает ли RabbitMQ SNI? – jww

+0

Похоже, что с Erlang 18.x он включен, но должен быть включен в белый список в файле конфигурации RabbitMq. https://github.com/rabbitmq/rabbitmq-server/issues/789 – ragerory

0

я имел "сброс соединения пэром" ошибка в последнее время при настройке Dev кролика. товаров:

  1. Установить Erlang 18.2 вместо 19.2. Мне не повезло с версиями 19.X при настройке TLS. У меня были странные ошибки, и ничто не регистрировалось RabbitMQ.
  2. при попытке Erlang 18.2 посмотреть на your_instance-sasl.log, проблемы с TLS были зарегистрированы там для меня достаточно подробно, поэтому я смог решить эти проблемы.

У меня есть сервер RabbitMQ, установленный на Centos7 и клиент в Windows. Для среды dev я использовал tls-gen для создания сертификатов. Было очень легко.

+0

Я попробую это утром, если выше не разобраться сегодня вечером. – ragerory

 Смежные вопросы

  • Нет связанных вопросов^_^