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?
Wie sieht Ihr 'rabbitmq.config' aus? – cantSleepNow
Ich habe den ursprünglichen Beitrag mit RabbitMQ Config aktualisiert. Es ist eine Standardkonfiguration. –