2011-08-08 89 views
2

我一直在尝试为我的rabbitMQ应用程序建立一个ssl支持,我遵循rabbitmq文档link在我的.net应用程序中包含了对ssl支持,我已经能够成功创建为SSL认证证书,并创造了兔子一个配置文件并把它放在里面的RabbitMQ AppData文件夹内的文件夹为配置文件中的代码:SSL支持Rabbit + .Net + Windows

[ 
{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}]} 
]} 
] 

我已经修改的RabbitMQ我的C#代码是这样的发布人:

 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 

回答

3

BrokerUnreachableException当客户端无法连接到代理发生。发生这种情况的原因很多:代理未运行,Windows防火墙阻止端口5671,证书未在连接的任何一端正确安装。

要调试:

  • 是代理监听5671?检查日志文件以查找提及ssl监听器的条目。它应该看起来像:

= INFO报告==== 8月 - 2011 :: 11:51:47 ===
开始SSL监听器0.0.0.0:5671

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

一旦您知道正在读取配置文件,请确保您具有正确的设置,详见RabbitMQ SSL Guide

  • 客户端是否连接? (忽略现在SSL)下面是一个失败的SSL连接的样子:

= INFO报告==== 8月 - 2011 :: 11:54:54 ===
接受54:54 ===
启动TCP连接< 0.477.0>从127.0.0.1:52110

= INFO REPORT ==== 8 - 8 - 2011 :: 11上0.0.0.0:5671 TCP连接从127.0.0。1:52110

...

=错误报告==== 8 - 8 - 2011 :: 11:54:55 ===
误差上的TCP连接< 0.477.0>:{ssl_upgrade_error “意外的消息”}

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

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

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

  • 如果是别的东西,请邮寄两种 .NET堆栈跟踪,相关代理日志条目和配置文件(“启动TCP连接”和“关闭TCP连接”之间的一切)。

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

+0

感谢您的答复,我已经在日志文件中得到entires,但仍然无法正常工作。我正在使用Windows 7,+1进行详细回复。一旦它正在工作,我会将你的答复标记为答案。谢谢 – abhijit

+0

我把我的问题发布到rabbitmq讨论他指出配置文件中的一些错误仍然没有工作出也检查日志文件无法找到任何有关ssl的错误,我正在修改问题我已经发布堆栈跟踪和经纪人日志的问题现在.. – abhijit

+0

仅供参考,那仍然是我。让我们在那里完成讨论,一旦我们找出错误,我会编辑答案。 – scvalex