【发布时间】:2018-10-17 07:22:19
【问题描述】:
我是 rabbitmq 的新手,但我必须连接到远程代理才能发送和接收消息。远程服务器超出了我的控制范围,几乎不可能从它的团队那里得到答案。不过,我可以使用地址、端口、虚拟主机和用户凭据。服务器使用 TLS v1.2。 问题是我无法使用 .NET 客户端建立与服务器的连接。客户端是“rabbitmq.client.5.1.0”,.NET Framework 4.5.1 和 VS 2017。我的代码是:
public bool Start() {
try {
var f = new ConnectionFactory();
f.UserName = "TestUser";
f.Password = "TestPwd";
f.HostName = "x.x.x.x";
f.Port = 5673;
f.VirtualHost = "TestVH";
f.Ssl.Version = SslProtocols.Tls12;
f.Ssl.Enabled = true;
f.Ssl.AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateChainErrors
| SslPolicyErrors.RemoteCertificateNameMismatch
| SslPolicyErrors.RemoteCertificateNotAvailable;
var c = f.CreateConnection();
} catch( Exception e ) {
throw e;
}
}
它抛出一个异常,最里面的是:
身份验证失败,因为远程方已关闭传输流。
如果我使用 Java (1.8, amqp-client-4.0.2),我可以成功连接到服务器。
public static void main( String[] args ) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("x.x.x.x");
factory.setPort(5673);
factory.setUsername( "TestUser" );
factory.setPassword( "TestPwd" );
factory.setVirtualHost( "TestVH" );
factory.useSslProtocol("TLSv1.2");
Connection conn = factory.newConnection();
}
我想使用 C# 来完成这项工作,但我无法解决这个问题。任何帮助将不胜感激!
【问题讨论】:
-
如果您尝试使用 Tls11 或 Tls10 会怎样?
-
它给我带来了同样的结果 - 远程服务器关闭连接 =\
-
如果您可以从 RabbitMQ 获取记录的消息,那可能会有所帮助。否则,我建议关注TLS troubleshooting guide。我想知道的是Java连接与.NET连接使用的是什么密码。这可能就是区别。使用
openssl s_client命令获取该信息。 -
谢谢你的提示,我会调查的!