【发布时间】:2020-09-16 09:04:06
【问题描述】:
我尝试使用 SSL 从 .NET 应用程序连接到 RabbitMQ。
RabbitMQ 3.8.8、Erlang 22.2、Windows 操作系统
RabbitMQ.Client.Exceptions.BrokerUnreachableException:'指定的端点都不可到达' 内部异常: IOException:未找到兼容的身份验证机制 - 服务器提供 []advanced.config
[
{ssl, [{versions, ["tlsv1.2", "tlsv1.1"]}]},
{rabbit, [
{auth_backends, [rabbit_auth_backend_ldap]},
{auth_mechanisms, ["PLAIN", "AMQPLAIN", "EXTERNAL"]},
{ssl_listeners, [5671]},
{ssl_options, [
{cacertfile,"C:\\Program Files\\RabbitMQ SSL\\cacert.pem"},
{certfile,"C:\\Program Files\\RabbitMQ SSL\\cert.pem"},
{keyfile,"C:\\Program Files\\RabbitMQ SSL\\key.pem"},
{verify,verify_peer},
{fail_if_no_peer_cert,false}
]}
]},
{rabbitmq_auth_backend_ldap, [
{servers, ["corp.mydamain.com", "10.10.0.4", "10.10.0.6"]},
{user_dn_pattern, "cn=${username},OU=IT,OU=USR,DC=corp,DC=mydamain,DC=com"},
{dn_lookup_attribute, "userPrincipalName"},
{dn_lookup_base, "DC=corp,DC=mydamain,DC=com"},
{user_dn_pattern, "${username}@corp.mydamain.com"},
{use_ssl, false},
{port, 389},
{log, true},
{vhost_access_query, {in_group, "CN=GRP_ORG.IT,OU=ORG,OU=GRP,DC=corp,DC=mydamain,DC=com"}},
{resource_access_query, {in_group, "CN=GRP_ORG.IT,OU=ORG,OU=GRP,DC=corp,DC=mydamain,DC=com"}},
{tag_queries, [
{administrator, {constant, false}},
{management, {constant, true}}
]}
]}
].
我尝试删除 auth_mechanisms 参数。然后我得到错误:
RabbitMQ.Client.Exceptions.BrokerUnreachableException:'指定的端点都不可到达' 内部异常: IOException:未找到兼容的身份验证机制 - 服务器提供 [AMQPLAIN PLAIN]我使用 .NET RabbitMQ.Client 5.2.0
源代码
var factory = new ConnectionFactory
{
HostName = "dtc01-betst1",
Port = AmqpTcpEndpoint.DefaultAmqpSslPort,
VirtualHost = "/",
AuthMechanisms = new AuthMechanismFactory[] { new ExternalMechanismFactory() }
};
factory.Ssl.ServerName = "dtc01-betst1.corp.mydamain.com";
factory.Ssl.CertPath = "cert.pem"; // the same file as in {certfile,"C:\\Program Files\\RabbitMQ SSL\\cert.pem"} in advanced.config
factory.Ssl.CertPassphrase = "";
factory.Ssl.Enabled = true;
factory.Ssl.Version = SslProtocols.Tls12;
using (var con = factory.CreateConnection())
using (var channel = con.CreateModel())
{
...
}
【问题讨论】: