2016-05-27 6 views
3

Wir versuchen, ein PoC zu erstellen, das zeigt, dass in verschiedenen Sprachen geschriebene Anwendungen über den RabbitMQ-Broker in einer Organisation kommunizieren können. Wir führen Vanille RabbitMQ Docker Bild rabbitmq: 3.6.1-Management und Vanille haproxy Docker Bild haproxy: 1.6.5, die SSL tut:RabbitMQ DotNet Client stellt keine Verbindung zu SSL her

frontend amqp_front 
    bind *:5672 tcp-ut 5s 
    mode tcp 
    timeout client 60s 
    timeout client-fin 1s 
    no option clitcpka 
    default_backend amqp_back 

frontend amqp_front_ssl 
    bind *:5671 tcp-ut 5s ssl crt /etc/certs/haproxy/rmq.pem ca-file /etc/certs/haproxy/root.crt verify required 
    mode tcp 
    timeout client 60s 
    timeout client-fin 1s 
    no option clitcpka 
    acl client ssl_c_s_dn(CN) -m str cli 
    tcp-request content reject if !client 
    default_backend amqp_back 

RabbitMQ config:

[ 
    {rabbit, 
    [ 
     { tcp_listeners, [ 5672 ] }, 
     { ssl_listeners, [ ] }, 
     {default_pass, <<"pwd">>}, 
     {default_user, <<"usr">>}, 
     {default_vhost, <<"default">>}, 
     {loopback_users, []} 
    ] 
    }, 
    { rabbitmq_management, [ 
     { listener, [ 
     { port, 15672 }, 
     { ssl, false } 
     ] 
     } 
    ] 
    } 
]. 

Wir habe einen trivialen Code in Go & geschrieben Node.js, die beide root.crt laden, cli.crt & cli.key und erfolgreich eine Verbindung zu SSL po rt 5671 und konsumiere.

Versuch, den gleichen trivialen Code in .Net, mit RabbitMQ.Client.dll (Version 3.6.0, 3.6.1, 3.6.2) schlug fehl, obwohl zu schreiben:

X509Store store = new X509Store (StoreName.Root, StoreLocation.LocalMachine); 
store.Open (OpenFlags.ReadOnly); 

var factory = new ConnectionFactory(); 
factory.Ssl.Enabled = true; 
factory.Ssl.ServerName = "rmq"; 
factory.Ssl.Certs = store.Certificates; 
factory.Ssl.CertPassphrase = ""; 
factory.HostName = "localhost"; 
factory.Port = 5671; 
factory.UserName = "usr"; 
factory.Password = "pwd"; 
factory.VirtualHost = "default"; 

var conn = factory.CreateConnection() 

Was .Net ist passiert Client ignoriert Port 5671 einfach ignoriert die Einstellungen oben, es geht einfach zu 5672. Wenn 5672 offen ist - verbindet sich mit ihm, und wenn 5672 geschlossen ist - schlägt mit Verbindung abgelehnt.

Code in Go und Node.js beweisen, dass meine SSL-Konfiguration gültig ist. Fehler von .Net-Client zeigt, dass SSL-Zeug hat nicht einmal eine Chance, in springen.

Ich bin auf debian jessie & Mono.

Fehle ich etwas offensichtlich?

+0

Wie sieht Ihr 'rabbitmq.config' aus? – cantSleepNow

+0

Ich habe den ursprünglichen Beitrag mit RabbitMQ Config aktualisiert. Es ist eine Standardkonfiguration. –

Antwort

2

Dies ist ein Problem mit der RabbitMQ .net-Client 3.6.2-Bibliothek, die den angegebenen Port bei der Verwendung von SSL nicht berücksichtigt.

Es wurde seither behoben und wird verfügbar sein, wenn 3.6.3 veröffentlicht wird (sie synchronisieren Releases mit dem Server, also habe keine Ahnung, wann das Schiff geliefert wird).

Ihre Optionen sind: -

  • eine ältere Version des .net-Client verwenden
  • die .net-Client aus der aktuellen Quelle
  • Verwendung Erstellen Sie die Standard-Ports, wenn Sie können
  • Warten für 3.6.3 wird freigegeben
Verwandte Themen