java - ActiveMQ 5.15.9 安全

标签 java c# activemq

我目前正在使用部署在我们的测试服务器上的 ActiveMQ 5.15.9。 我必须实现某种安全措施,以便任何人都无法访问内部队列。 到目前为止,我所做的是将以下内容添加到 activemq.xml 中:

<plugins>
    <simpleAuthenticationPlugin anonymousAccessAllowed ="false">
        <users>
            <authenticationUser
                username="admin"
                password="pass"
                groups="admins,publishers,consumers" />
        </users>
    </simpleAuthenticationPlugin>
    <authorizationPlugin>
        <map>
            <authorizationMap>
                <authorizationEntries>
                    <authorizationEntry topic =">" write="producers" read="consumers" admin="admins" />         
                    <authorizationEntry queue ="TEST.Q" write="producers" read="consumers" admin="admins" />
                </authorizationEntries>
            </authorizationMap>
        </map>
    </authorizationPlugin>
</plugins>

在我的 C# 上,这是访问队列的方式:

private static void SendNewMessageQueue(string text)
{
    string queueName = "TEST";
    Console.WriteLine($"Adding message to queue topic: {queueName}");
    string brokerUri = $"activemq:tcp://localhost:61616";  // Default port
    NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri);
    using (IConnection connection = factory.CreateConnection("admin","pass"))
    {
        connection.Start();
        using (ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
            using (IDestination dest = session.GetQueue(queueName))
                using (IMessageProducer producer = session.CreateProducer(dest))
                {
                    producer.DeliveryMode = MsgDeliveryMode.NonPersistent;
                    producer.Send(session.CreateTextMessage(text));
                    Console.WriteLine($"Sent {text} messages");
                }
    }
}

但是当我尝试运行我的代码时,出现以下错误:

User admin is not authorized to write to: queue://TEST

我需要这个,以便我可以将此 MQ 公开到 Internet,并通过仅允许拥有凭据的消费者/发布者来确保其安全。

最佳答案

您已经为名为 TEST.Q 的队列配置了安全性,但您正在尝试使用名为 TEST 的队列,但该队列不相同,因此您会收到此错误。如果您想公开测试前缀下的所有队列,那么它看起来更像是:

     <authorizationEntry queue ="TEST.>" write="producers" read="consumers" admin="admins" />

有一些安全配置的文档 here ,并且还了解 wildcard语法会有帮助。

正如您所提到的,通过互联网公开经纪人并不是一件容易的事,因此请谨慎行事。

关于java - ActiveMQ 5.15.9 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57800597/

相关文章:

connection - javax.jms.JMSException : Channel was inactive for too long: localhost/127. 0.0.1:7676

java - jackson :引用同一个对象

java - 我想将 html 表数据转换为 pdf 并使用 jquery 下载它,代码如下

java - 如何使 JTable 列不包含 JTextFields,而是包含 JTextAreas?

c# - 完成选择项目时的事件?

tomcat - 如何在 tomcat 上优雅地关闭 ActiveMQ session 线程

java - Spring Boot + ActiveMQ 以编程方式动态订阅主题

java - 使用 jUnit 4.12 和 Hamcrest 1.3,我如何断言函数返回两个整数之一?

c# - 如何链接添加到 DbSet 的实体

c# - WCF 错误架构