6、Connecting with SSL 在EasyNetQ上使用SSL连接
EasyNetQ可以通过SSL连接。
首先,你必须仔细依据https://www.rabbitmq.com/ssl.html文章中的步骤。我花费了很多时间尝试让openssl这部分能运作起来,然后为了让他按我的需要去运作而不仅仅只是一个demo,我又花费了很多时间。
第一次通过SSL让EasyNetQ运行时,在他们为了测试而做的可以运行的页面上的那点DotNet代码给我提供了很大帮助。我有一个简单的控制台程序,包涵了Rabbit和EasyNetQ代码,会在下面展示。此外使用了Rabbit logs。
当你连接上后,管理界面的connection页面会显示一个小的SSL协议标签。你也会在Overview 选项卡的端口监听表里看到443端口。(假设这是你所绑定的)
代码如下:
1 var connection = new ConnectionConfiguration(); 2 3 connection.Port = 443; 4 connection.UserName = "user"; 5 connection.Password = "pass"; 6 connection.Product = "SSLTest"; 7 8 var host1 = new HostConfiguration(); 9 host1.Host = "rmq1.contoso.com"; 10 host1.Port = 443; 11 host1.Ssl.Enabled = true; 12 host1.Ssl.ServerName = "rmq1.contoso.com"; 13 host1.Ssl.CertPath = "c:\\tmp\\myclient.p12"; 14 host1.Ssl.CertPassphrase = "secret"; 15 16 var host2 = new HostConfiguration(); 17 host2.Host = "rmq2.contoso.com"; 18 host2.Port = 443; 19 host2.Ssl.Enabled = true; 20 host2.Ssl.ServerName = "rmq2.contoso.com"; 21 host2.Ssl.CertPath = "c:\\tmp\\myclient.p12"; 22 host2.Ssl.CertPassphrase = "secret"; 23 24 connection.Hosts = new List<HostConfiguration> { host1, host2 }; 25 26 connection.Validate(); //VERY IMPORTANT - DOES CONFIG AS WELL AS VALIDATION! 27 28 var Bus = RabbitHutch.CreateBus(connection, services => services.Register<IEasyNetQLogger>(logger => new DoNothingLogger()));
尽管在ConnectionConfiguration上有一个Ssl选项属性,但在HostConfiguration对象上设置Ssl选项属性更合适。HostConfiguration对象上设置SSL选项可以支持集群的场景。注意,在上面代码中我们指定了两个HostConfiguration对象。假如一个挂了,EasyNetQ的持续连接功能将自动连接到下一个可用的主机。在这个主机上配置SSL在连接时就不会出现任何错误。
假如你仅仅指定一个主机,你可以选择通过HostConfiguration对象去设置SSL选项,也可以直接用ConnectionConfiguration对象去设置。(此时两种都一样了)
不要忘记调用Validate()方法。我最初没调用(我写的都是硬编码,没有什么错误需要验证),但是我错了。该方法实际上应用了连接所需的各种设置。
SslOption详情参见文档SslOption Class
你可以尝试用官方的RabbitMQ .NET client去配置和测试,尝试去运行示例。首先要阐明,在你的项目做任何修改前,所有这些设置都被正确的描述在Official RabbitMQ SSL documentation for .NET.
原文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Connecting-with-SSL