2011-08-10 39 views
3

我正在嘗試對Active MQ創建的JMX連接器使用SSL,但沒有成功。我能夠使用SSL與JVM平臺JMX連接器一起工作,但需要存儲密鑰庫和信任庫密碼明文,這對我們的項目來說是不可行的。活動MQ JMX SSL

使用說明書here,我成立了managementContext在activemq.xml中如下:

<managementContext> 
    <managementContext createConnector="true"> 
    <property xmlns="http://www.springframework.org/schema/beans" name="environment"> 
     <map xmlns="http://www.springframework.org/schema/beans"> 
     <entry xmlns="http://www.springframework.org/schema/beans" 
       key="javax.net.ssl.keyStore" 
       value="${activemq.base}/conf/keystore.jks"/> 
     <entry xmlns="http://www.springframework.org/schema/beans" 
       key="javax.net.ssl.keyStorePassword" 
       value="${keystore.password}"/> 
     <entry xmlns="http://www.springframework.org/schema/beans" 
       key="javax.net.ssl.trustStore" 
       value="${activemq.base}/conf/truststore.jks"/> 
     <entry xmlns="http://www.springframework.org/schema/beans" 
       key="javax.net.ssl.trustStorePassword" 
       value="${truststore.password}"/> 
     </map> 
    </property> 
    </managementContext> 
</managementContext> 

本節似乎在連接器啓動時被完全忽略。我可以連接沒有憑據。我也嘗試使用用戶名和密碼身份驗證,而不是用於JMX的SSL,如here,並且工作正常。

有沒有人見過這個?有任何想法嗎?謝謝!

+0

嗨,我面臨同樣的問題。你有沒有找到解決辦法? – Satyaprakash

回答

0

您是否在activemq啓動腳本中啓用了jmx ssl?在activemq-admin或activemq批處理文件的窗口中,取消註釋並修改SUNJMX設置。

JMX驗證與是否使用ssl無關。它由authenticate屬性控制。默認情況下,它將使用jre中的jmx訪問文件,所以將它們重新指向下面顯示的系統屬性。您可能會收到一條錯誤消息,指出這些文件本身必須是訪問控制的,因此請使用unix上的chmod或Windows上的cacls來設置它們。我會建議甚至關閉ssl並讓身份驗證首先工作。您可以使用帶有遠程連接的jconsole進行測試,以確認它需要證書。然後跟隨ssl的東西。

set SUNJMX=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1199 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=true -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/access/jmx.password -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_BASE%/conf/access/jmx.access 
0

我關於在XML中的ActiveMQ SSL配置(密鑰庫&密碼)不工作了同樣的問題。

我的要求是通過SSL啓用遠程JMX監視ActiveMQ並通過防火牆進行身份驗證。

我使用自定義JMX連接器(通過Java代理)解析了它,而不是使用Active MQ創建的JMX連接器。

看到:JMX connectivity through a firewall爲一個例子(JMXAgent.java)

在JMXAgent配置SSL的重要的項。Java是:

Map<String, Object> env = new HashMap<String, Object>();   
SslRMIClientSocketFactory csf = new SslRMIClientSocketFactory(); 
SslRMIServerSocketFactory ssf = new SslRMIServerSocketFactory(); 
env.put(RMIConnectorServer.RMI_CLIENT_SOCKET_FACTORY_ATTRIBUTE, csf); 
env.put(RMIConnectorServer.RMI_SERVER_SOCKET_FACTORY_ATTRIBUTE, ssf); 

你也可以在ENV地圖指定的認證文件:

env.put("jmx.remote.x.password.file", System.getProperty("password.file","<default_path>")); 
env.put("jmx.remote.x.access.file", System.getProperty("access.file","<default_path>")); 

Java的代理需要描述here

被編譯並放入罐子有效的清單文件

添加以下到ActiveMQ的啓動配置(取決於ActiveMQ的版本/環境和運行的ActiveMQ:

-javaagent:<full_path_to_agent_jar_file> \ 
-Dpassword.file=<full_path_to_jmx.password_file> \ 
-Daccess.file=<full_path_to_jmx.access_file> \ 
-Djavax.net.ssl.keyStore=<full_path_to_keystore_file> \ 
-Djavax.net.ssl.keyStorePassword=<password> 

然後,您應該能夠通過JConsole的連接(使用正確的安全參數)

遠程JMX連接的URL將是這樣的:

service:jmx:rmi://<host>:<rmi_server_port>/jndi/rmi://<host>:<port>/jmxrmi 

注 - 端口可以在Java代理進行配置。