【问题标题】:Connecting to RabbitMQ over SSL using .NET使用 .NET 通过 SSL 连接到 RabbitMQ
【发布时间】: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())
{
    ...
}

【问题讨论】:

    标签: c# .net ssl rabbitmq


    【解决方案1】:

    您应该在配置文件中使用正斜杠。

    由于您尝试使用 X509 证书身份验证,因此您必须确保启用了 rabbitmq-auth-mechanism-ssl 插件:

    rabbitmq-plugins.bat enable rabbitmq_auth_mechanism_ssl
    

    如果这不能解决您的问题,我强烈建议您通过rabbitmq-users 邮件列表寻求帮助。


    注意:RabbitMQ 团队会监控 rabbitmq-users mailing list,并且有时只回答 StackOverflow 上的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2018-07-16
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2011-02-09
      相关资源
      最近更新 更多