在第二篇文章中提到了修改用户名密码的方式,下面来看看ActiveMQ连接安全问题:

一、客户端连接服务端

如果消息服务器activemq.xml中设置了用户名、密码则消息生产者和消息消费者连接到消息服务器是如果用户名密码和消息服务器设定的不一样则不能发送或消息消息的。

1、activemq.xml 配置文件中进行配置:

<!-- 用户名密码设置 -->
       <plugins>  
            <simpleAuthenticationPlugin>  
                <users>  
                    <authenticationUser username="system" password="system" groups="users,admins"/> 
                    <authenticationUser username="whd" password="123" groups="users"/> 					
                </users>  
            </simpleAuthenticationPlugin>  
        </plugins> 
		
    </broker>




2、消息生产者:

connectionFactory = new ActiveMQConnectionFactory("system", "system","tcp://127.0.0.1:61616");


connectionFactory = new ActiveMQConnectionFactory("whd", "123","tcp://127.0.0.1:61616");



3、消息消费者:

connectionFactory = new ActiveMQConnectionFactory("system", "system","tcp://127.0.0.1:61616");


connectionFactory = new ActiveMQConnectionFactory("whd", "123","tcp://127.0.0.1:61616");



ok 这样我们就简单的定义了用户名和密码,消息生产者和消息消费者的连接都需要和消息服务设置的用户名密码匹配否则就连接不到了,也简单的进行了安全限制!


二、连接服务器的限制

1、activemq.xml 中配置连接服务器的限制

<transportConnectors>
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" />
</transportConnectors>



如果uri 是0.0.0.0的话则只能从本地连接而如果把0.0.0.0改成localhost或127.0.0.1 则只能从本机连接

这样就对ip有了限制。

三、桥接设置用户名密码

在之前的文章中我们使用桥接的方式实现了负载均衡,我们也知道在设置桥接的时候如果使用了duplex="true" 即双向连接,如果不设置用户名密码则别人知道了ip和port之后如果人家设置一个双向连接则你很多消息或者所有的消息都能被被人获取到,所以很不安全。

1、networkConnector 设置用户名密码:

部署情况:Activemq1、程序1部署在服务器1,Activemq2部署在服务器2,程序2部署在服务器3,程序1发送消息时,程序2需要接收并回应。
网络限制:服务器2可以访问服务器1,服务器3可以访问服务器2,服务器1无法访问服务器2和服务器3
解决:通过Activemq进行桥接,即把服务器2的Activemq2和服务器1的Activemq1桥接起来,使得程序2可以通过Activemq2来获取程序1发送到Activme1的消息

在Activemq2的配置文件acvtivemq.xml中配置:

<networkConnectors>  
    <networkConnector uri="static:(tcp://xxxxxxxx:xxxx)" duplex="true" name="mybridge"  userName="system" password="manager">  
        <dynamicallyIncludedDestinations>  
            <queue physicalName="testQueue"/>  
            <queue physicalName="testQueueResponse"/>  
        </dynamicallyIncludedDestinations>  
          
    </networkConnector>  
</networkConnectors>

其中:uri为Activemq1的地址,deplex配置是否为双向,userName、password分别为Activemq1的帐号密码,根据实际情况,配置了需要桥接的队列,testQueue和testQueueResponse。



网上设置的都是客户端连接的用户名密码的设置而设置networkConnectors的很少,官网上写的demo也是和这里的demo是一样的配置,但是这种配置是链接不到对方的,一直包用户名或密码无效


2、Broker、networkConnector、桥接

这三个区别很大,但也容易混淆就顺便解释一下:Broker 代理,可以把它理解为消息服务器消息管理者,因为我们只需要把消息发送给他其他的细节不用管,他会处理的,他就代理了消息服务器!

networkConnector 网络连接器,连接两个或多个Broker,实现相互从Broker中获取消息数据,networkConnector网络连接器提供了这样的功能而通过网络连接器连接的方式有点像桥,比如桥吧两个岛屿联通一样,所以他们的链接就称为桥接!


3、自己试了一个就是两个Broker的用户名密码都一样的时候按照上面的这种配置方式配置就可以了,所以很郁闷,网上真没有相关的回答!!!有知道的请赐教在这谢谢了!


三、ActiveMQ消息安全机制和源码分析:

这里就给一篇文章的链接吧:http://zephiruswt.blog.51cto.com/5193151/1004042/