java - rabbitmq,Java 客户端通过 SSL 工作,但 .NET 不支持
问题描述
我是 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;
}
}
它抛出一个异常,最里面的是:
身份验证失败,因为远程方已关闭传输流。
(Wireshark 捕获)。
如果我使用 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# 来完成工作,但我无法解决这个问题。任何帮助将不胜感激!
解决方案
尝试更改此行:
f.Ssl.Version = SslProtocols.Tls12;
对此:
f.Ssl.Version = SslProtocols.Tls12 | SslProtocols.Ssl3 | SslProtocols.Tls11 | SslProtocols.Ssl2;
如果那行得通,那么您可以缩小范围
推荐阅读
- django - Django allauth google extra_data
- javascript - 如何在浏览器内存中保存信息并在按下时显示而不使用react刷新页面?
- ruby-on-rails - 我在 Rails 应用程序中的表单未捕获数据
- bison - 需要帮助确定“默认操作的类型冲突”的原因
- tensorflow - LSTM 预测结果无法拟合真实值
- java - SAXParser 在 62 元素之后给我一个空值,原因不明,为什么?
- javascript - Rail 6 Webpack 导入 JS 第三方库 Uncaught ReferenceError: x is not defined
- python - 如何修复'消息:无法找到元素:{“method”:“name”,“selector”:“username”}'
- javascript - 选择特定选择选项时如何调用函数?
- java - 如何将下面的代码转换为常规的 java for 循环?