我正在尝试使用TLS1.2连接到RabbitMQ服务器,但是我似乎做不到。我已经验证我的用户名和密码可以正常工作,因为我可以连接到RabbitMQ Web客户端。
using System;
using System.Net;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
namespace DigitalFulfillmentRabbitMQ
{
public class RabbitMQService
{
public IConnection GetRabbitMqConnection()
{
ConnectionFactory connectionFactory = new ConnectionFactory();
// ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
// connectionFactory.Ssl.CertificateValidationCallback = CheckValidationResult();
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
connectionFactory.HostName = ConfigurationManager.AppSettings["RabbitMQServer"].ToString();
connectionFactory.VirtualHost = ConfigurationManager.AppSettings["RabbitMQVHOST"].ToString();
connectionFactory.Port = Int32.Parse(ConfigurationManager.AppSettings["RabbitMQPort"].ToString());
connectionFactory.UserName = ConfigurationManager.AppSettings["RabbitMQAccountUserName"].ToString();
connectionFactory.Password = ConfigurationManager.AppSettings["RabbitMQAccountPassword"].ToString();
// connectionFactory.Ssl.ServerName = System.Net.Dns.GetHostName();
connectionFactory.Ssl.ServerName = ConfigurationManager.AppSettings["RabbitMQServer"].ToString();
connectionFactory.Ssl.CertPath = ConfigurationManager.AppSettings["RabbitMQSSLCertPath"].ToString();
// connectionFactory.Ssl.CertPassphrase = ConfigurationManager.AppSettings["RabbitMQSSLCertPassphrase"].ToString();
connectionFactory.Ssl.Enabled = Convert.ToBoolean(ConfigurationManager.AppSettings["RabbitMQSSLIsEnabled"].ToString());
connectionFactory.Ssl.Version = System.Security.Authentication.SslProtocols.Tls12;
return connectionFactory.CreateConnection();
}
}
}
证书是我放在客户端上的.pem证书。我正在使用端口8071。证书路径的格式为“ D:\ RabbitMQ_DF_SIT_Server_certificate \ ca_certificate.pem”。我正在使用NuGet 5.1.0中的RabbitMQ客户端
我怀疑我是否需要证书验证回调方法,因为据我了解其单向连接。此应用程序只会使用,而不会发布。我想念什么?证书位于客户端服务器上,但本身未安装。
它抛出一个错误:
RabbitMQ.Client.Exceptions.BrokerUnreachableException:没有指定的端点可访问---> System.AggregateException:发生一个或多个错误。 ---> System.Security.Authentication.AuthenticationException:对SSPI的调用失败,请参阅内部异常。 ---> System.ComponentModel.Win32Exception:客户端和服务器无法通信,因为它们不具有通用算法
答案 0 :(得分:0)
要将TLS与RabbitMQ一起使用,必须通过Windows %APPDATA%/RabbitMQ/rabbitmq.conf
文件中的RabbitMQ配置启用此功能。
根据所使用的Erlang版本,配置可以是经典格式/ ini样式。有关更多详细信息,请参阅https://www.rabbitmq.com/configure.html
使用更新的ini样式配置格式,配置应如下所示
listeners.ssl.default = 5671
ssl_options.verify = verify_none
ssl_options.fail_if_no_peer_cert = false
ssl_options.cacertfile = <location to cacertfile.crt>
ssl_options.certfile = <location to certfile.crt>
ssl_options.keyfile = <location to private.key>
以上所有内容都可以通过我为此编写的脚本进行自动化和验证 https://gist.github.com/skewl84/a72321379a65c4c5cfd447f8806b5188
上面的脚本确实存在