【发布时间】:2019-04-01 13:49:58
【问题描述】:
我正在尝试使用 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: 客户端和服务器无法通信,因为它们没有共同的算法
【问题讨论】:
-
你使用的是什么版本的 Erlang?您可能必须启用额外的密码套件docs。注意:RabbitMQ 团队监控
rabbitmq-usersmailing list 并且有时只回答 StackOverflow 上的问题。 -
我认为我们要做的就是购买一台新的 Windows 2016 服务器。
-
更新:部署到 Windows 2016 服务器后,我没有任何问题。以前的尝试是使用 Windows 08R2。即使在 Windows 2012 中,其他人也报告了同样的问题。
-
这是有趣的信息,感谢您的跟进。
-
请注意,我当时尝试连接的 RabbitMQ 服务器位于某种 Linux 机器上。我的猜测是因为我的应用程序试图从中提取消息的服务器是旧 Windows 旧 Windows -> Linux 可能导致无法协商通用密码的问题。
标签: rabbitmq windows-server-2008-r2 tls1.2 .net-4.7.2