Активный MQ JMX SSL - PullRequest
       22

Активный MQ JMX SSL

3 голосов
/ 11 августа 2011

Я пытаюсь использовать SSL с разъемом JMX, который создает Active MQ, но безуспешно.Я могу заставить SSL работать с JMX-коннектором платформы JVM, но для этого требуется хранение открытого текста паролей хранилища ключей и хранилища доверенных сертификатов, что запрещено для нашего проекта.

Использование инструкций здесь , Я настроил 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>

Этот раздел, кажется, полностью игнорируется при запуске соединителя.Я могу подключиться без учетных данных.Я также попытался использовать аутентификацию по имени и паролю вместо ssl для JMX, как видно здесь , и это работало нормально.

Кто-нибудь видел это раньше?Есть идеи?Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 января 2014

У меня была такая же проблема, касающаяся конфигурации SSL ActiveMQ (хранилище ключей и пароль) в XML не работает.

Моим требованием было включить удаленный JMX-мониторинг ActiveMQ с SSL и аутентификацию через брандмауэр.

Я решил использовать собственный JMX-коннектор (через Java-агент), а не JMX-коннектор, который создает Active MQ.

см. JMX-подключение через брандмауэр для примера (JMXAgent.java)

Важные записи для настройки SSL в JMXAgent.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 должен быть скомпилирован и помещен в jar с допустимым файлом манифеста, как описано здесь

Добавьте следующее в конфигурацию запуска 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 (с правильными параметрами безопасности)

URL удаленного JMX-соединения будет выглядеть примерно так:

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

Примечание. Порты можно настроить в агенте Java.

0 голосов
/ 22 сентября 2013

Включили ли вы jmx ssl в сценарии запуска activemq? На окнах в пакетных файлах activemq-admin или activemq раскомментируйте и измените настройки SUNJMX.

Аутентификация JMX не зависит от того, используется ли ssl. Управляется атрибутом authenticate. По умолчанию он будет использовать файлы доступа jmx в вашем jre, поэтому переназначьте их с помощью системных свойств, показанных ниже. Вы можете получить сообщение об ошибке, в котором говорится, что сами файлы должны контролироваться доступом, поэтому установите их с помощью chmod в unix или cacls в windows. Я бы предложил даже выключить 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
...