具有RabbitMQ客户端身份验证异常的QPID代理

时间:2014-10-15 19:48:45

标签: java authentication rabbitmq amqp qpid

我正在使用Java QPID代理进行测试。我能够使用质子客户端发送和接收消息,但使用匿名身份验证。我感兴趣的是打开身份验证测试,并了解质子客户端不支持(尚未)。因此我下载了rabbitMQ客户端jar。我正在使用密码文件身份验证(QPID附带)。

我像这样设置我的RabbitMQ客户端连接工厂:

    connectionFactory = new ConnectionFactory();
    connectionFactory.setHost("localhost");
    connectionFactory.setUsername("guest");
    connectionFactory.setPassword("guest");

代码在此行上失败(特别是在getConnection上)。

    connection = RabbitMQConnectionFactory.getInstance().getConnection();

这是一个例外:

  

java.io.IOException:找不到兼容的身份验证机制 -   服务器提供[CRAM-MD5]   com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:309)     在   com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:590)     在   com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:612)     在   com.vue.rabbit.core.RabbitMQConnectionFactory.getConnection(RabbitMQConnectionFactory.java:37)     在   com.vue.rabbit.producer.SimpleProducer.main(SimpleProducer.java:25)

如果我更改QPID代理以使用匿名身份验证并且还更改客户端而不是设置用户/密码,我会得到类似的"服务器提供的例外[ANONYMOUS]"

我做错了吗?这些应该兼容吗?有些单独的问题是,为什么有Java和C ++ QPID代理,如果它们都支持相同的在线AMQP协议?在此先感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

实际上,最新的QPID支持普通SASL,但不建议这样做。请参阅documentation。在config.json中包含类似:"secureOnlyMechanisms": []的内容,如:

 "authenticationproviders" : [ {
    "id" : "798fc4a5-8edb-4b42-b1b2-8f7e9be8cccb",
    "name" : "passwordFile",
    "type" : "PlainPasswordFile",
    "path" : "${qpid.home_dir}${file.separator}etc${file.separator}passwd",
    "secureOnlyMechanisms": [],
    "preferencesproviders" : [ {
      "id" : "1dcee789-be1b-49cc-9032-3bc4b974d1d6",
      "name" : "fileSystemPreferences",
      "type" : "FileSystemPreferences",
      "path" : "${qpid.work_dir}${file.separator}user.preferences.json"
    } ]

答案 1 :(得分:1)

您使用的是什么版本的Java Broker?

如果答案是0.30,则PlainPasswordFile / Base64MD5PasswordFile身份验证提供程序(前者是附带配置中的默认设置)仅在客户端使用配置了SSL的AMQP端口时才向客户端提供PLAIN SASL机制。这样做是为了防止密码通过未受保护的端口以明文形式传播。

答案 2 :(得分:0)

您可以通过以下设置解决此问题:

"secureOnlyMechanisms" : []
config.json中“ authenticationproviders”下的

。此修复程序适用于较旧的版本(如6.0.2。)。

因此,您的配置可以包含以下内容:

"authenticationproviders": [
    {
      "name": "plain",
      "type": "Plain",
      "users": [
        {
          "name": "guest",
          "type": "managed",
          "password": "guest"
        }
      ],
      "secureOnlyMechanisms" : []
    }
],

在这里描述: https://qpid.apache.org/releases/qpid-java-trunk/java-broker/book/Java-Broker-Security.html