ActiveMQ的安全性配置

ActiveMQ的安全性,主要表現在兩個方面,一個是它的JMS服務的安全性,一個是它的管理控制檯的安全性。在缺省情況下,ActiveMQ在這兩個方面都是沒有配置安全性的。大家想象一下如果沒有安全機制,這將會引起什麼樣的後果。下文以最新的ActiveMQ5.2爲例,詳細描述如何配置的過程。

JMS服務安全性

      如果沒有配置JMS服務的安全性,任何連入網絡的人,只要知道ActiveMQ服務器的具體地址(包括IP地址,端口,消息地址[隊列或者主題地址]),就可以肆無忌憚的發送、接收消息。那麼要解決JMS服務的安全性,最關鍵的問題就是解決身份認證的問題。

1)增加plugin
<plugins>
    <!--use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
    <jaasAuthenticationPlugin configuration="activemq-domain" />
    <!-- lets configure a destination based authorization mechanism -->
    <authorizationPlugin>
        <map>
            <authorizationMap>
                <authorizationEntries>
                    <authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
                    <authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
                    <authorizationEntry queue="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins" />
                    <authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins" />
                </authorizationEntries>
            </authorizationMap>
        </map>
    </authorizationPlugin>
</plugins>
2)在conf中增加login.config文件,內容如下:
    activemq-domain {
        org.apache.activemq.jaas.PropertiesLoginModule required
        debug=true
        org.apache.activemq.jaas.properties.user="users.properties"
        org.apache.activemq.jaas.properties.group="groups.properties";
    };
3)在conf中增加groups.properties文件,內容如下:
   admins=system
4)在conf中增加users.properties文件,內容如下:
   system=manager

管理控制檯安全性

      ActiveMQ缺省的管理是通過內置的jetty服務器,只要在瀏覽器中輸入http://localhost:8161/admin,不需要登錄,就可以對隊列、主題及消息等進行管理,可以想象這非常不安全。那麼要解決管理控制檯的安全性,除了通過修改管理端口號以及應用名稱之外,最關鍵的也是需要進行配置,必須通過身份認證才能登錄。本文要說的方式主要是在不改變內置jetty的方式下,通過配置基本認證的方式來實現安全登錄。
1)在activemq.xml中增加realm設置
   <userRealms>
       <jaasUserRealm name="adminRealm" loginModuleName="adminLoginModule">
      </jaasUserRealm>
   </userRealms>

2)修改login.config文件,參考上面已見的login.config文件
   adminLoginModule { 
       org.mortbay.jetty.plus.jaas.spi.PropertyFileLoginModule required 
       debug="true" 
       file="C:/software/apache-activemq-5.2.0/conf/realm.properties"; 
   };

3)在lib\web中增加jetty-plus-6.1.9.jar;

4)在conf中增加realm.properties文件
    system: MD5:1d0258c2440a8d19e716292b231e3190,admins

注意,上面是用戶名爲system,而密碼爲manager,如果用戶密碼不一致,請根據如下命令獲得相關信息
java -cp jetty-6.1.9.jar;jetty-util-6.1.9.jar org.mortbay.jetty.security.Password system manager

5)修改webapps/admin/WEB-INF/web.xml
   <security-constraint>
       <web-resource-collection>
           <web-resource-name>adminRealm</web-resource-name>
           <url-pattern>/*</url-pattern>
       </web-resource-collection>
       <auth-constraint>
           <role-name>admins</role-name>
       </auth-constraint>
   </security-constraint>
   <login-config>
       <auth-method>BASIC</auth-method>
       <realm-name>adminRealm</realm-name>
   </login-config>


總結

       經過如上配置後,必須通過用戶安全驗證才能連接上消息服務器並進行消息發送和接收。當訪問http://localhost:8161/admin/時,將會彈出窗口以讓用戶輸入登錄帳號和密碼。特別說明一下,ActiveMQ跟安全相關的有三個地方,分別是上面說的消息服務器本身的身份認證、Web Console的身份認證,還有一個地方是通過Web Console訪問消息服務器的身份認證,也就是conf\credentials.properties,文件內容如下:
       activemq.username=system
       activemq.password=manager
這三個地方的用戶名密碼最好一致,尤其是credentials.properties中的賬號與users.properties中的管理員賬號必須一致。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章