Rabbit + .Net + Windows的SSL支持

时间:2011-08-08 07:14:10

标签: .net windows ssl rabbitmq

我一直在尝试为我的rabbitMQ应用程序建立一个ssl支持,我已经按照rabbitmq文档link在我的.net应用程序中包含ssl支持,我已经能够成功创建证书了ssl身份验证并为rabbit创建了一个配置文件,并将其放在rabbitMQ文件夹内的appdata文件夹中,配置文件的代码:

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

我已经为发布商修改了我的c#code of rabbitMQ:

        ConnectionFactory factory = new ConnectionFactory();
        factory.Ssl.ServerName = System.Net.Dns.GetHostName();
        factory.Ssl.CertPath = "C:\\server\\keycert.p12";
        factory.Ssl.CertPassphrase = "password";
        factory.Ssl.Enabled = true;

但是收到错误:BrokerUnreachableException未被添加。

任何提示或帮助?我失踪的任何一分钟让我知道吗?

我正在使用RabbitMQ:2.51。 Erlang:R14B01 操作系统:Windows和.net客户端。

堆栈跟踪:

Exception Message: None of the specified endpoints were reachable

Source: RabbitMQ.Client   

Stacktrace: at RabbitMQ.Client.ConnectionFactory.CreateConnection(Int32 maxRedirects)
               at RabbitMQ.Client.ConnectionFactory.CreateConnection()
               at RabbitProducer.Program.Main(String[] args) in C:\Users\pc 1\Documents\Visual Studio 2008\Projects\RabbitProducer\RabbitProducer\Program.cs:line 36

经纪人日志:

=INFO REPORT==== 9-Aug-2011::11:39:05 ===
Limiting to approx 924 file handles (829 sockets)

=INFO REPORT==== 9-Aug-2011::11:39:05 ===
Memory limit set to 804MB.

=INFO REPORT==== 9-Aug-2011::11:39:05 ===
msg_store_transient: using rabbit_msg_store_ets_index to provide index

=INFO REPORT==== 9-Aug-2011::11:39:05 ===
msg_store_persistent: using rabbit_msg_store_ets_index to provide index

=INFO REPORT==== 9-Aug-2011::11:39:05 ===
started TCP Listener on [::]:5672

=INFO REPORT==== 9-Aug-2011::11:39:05 ===
started TCP Listener on 0.0.0.0:5672

1 个答案:

答案 0 :(得分:3)

当客户端无法连接到代理时,会发生

BrokerUnreachableException。出现这种情况的原因有很多:代理程序未运行,Windows防火墙阻塞端口5671,证书未在连接的任何一侧正确安装。

调试:

  • 经纪人是否在听5671?检查日志文件以查找提及ssl侦听器的条目。它应该看起来像:
  

= INFO REPORT ==== 8-Aug-2011 :: 11:51:47 ===
  在0.0.0.0:5671

启动SSL侦听器

如果该条目不在日志文件中,请尝试通过rabbitmq-server.bat中的Program Files\RabbitMQ Server\rabbitmq-server-x.x.x\sbin\脚本运行rabbitmq,并检查横幅下的“config file:...”条目是否设置为您的配置文件。 (none)表示代理无法找到该文件。

一旦您知道正在阅读配置文件,请确保您具有RabbitMQ SSL Guide中详细说明的正确设置。

  • 客户端是否连接? (暂时忽略ssl)以下是SSL连接失败的原因:
  

= INFO REPORT ==== 8-Aug-2011 :: 11:54:54 ===
  接受来自127.0.0.1:52110的0.0.0.0:5671上的TCP连接

     

= INFO REPORT ==== 8-Aug-2011 :: 11:54:54 ===
  启动TCP连接< 0.477.0>从127.0.0.1:52110

     

...

     

=错误报告==== 2011年8月8日:: 11:54:55 ===
  TCP连接错误< 0.477.0&gt ;: {ssl_upgrade_error,“意外消息”}

     

= INFO REPORT ==== 8-Aug-2011 :: 11:54:55 ===
  关闭TCP连接< 0.477.0>

如果这不在日志中,那么这就是防火墙问题。

  • 这是Windows XP吗?如果是这样,祝你好运,我们在运行SSL时遇到了问题。在许多情况下,Microsoft的错误.NET实现将阻止您从文件加载证书。

  • 如果是其他内容,请发布完整 .NET堆栈跟踪,相关代理日志条目(“正在启动TCP连接”和“关闭TCP连接”之间的所有内容)和配置文件。

  • 如果没有其他工作,请尝试RabbitMQ Discuss邮件列表。开发人员回答所有问题。