Проверка подлинности Camel + JMX + LDAP с помощью org.apache.camel.jmx.createRmiConnector

все.

Пытались заставить удаленный JMX с аутентификацией JAAS работать с Camel версии 2.10.3 + Java 6.

Приложение использует Java DSL, «связано вручную» и работает с системными свойствами:

-Dcom.sun.management.jmxremote.authenticate=true 
-Djmx.remote.x.login.config=StagingJmxAuthConfig 
-Dorg.apache.camel.jmx.usePlatformMBeanServer=true 
-Djava.security.auth.login.config=./src/main/resources/conf/ldap-auth.config 
-Dcom.sun.management.jmxremote.ssl=false
-Dorg.apache.camel.jmx.createRmiConnector=true
-Dorg.apache.camel.jmx.rmiConnector.registryPort=9140

Однако во всех смыслах кажется, что я мог бы также работать с отключенной аутентификацией/авторизацией.

При отладке классов JMX и JAAS JRE (а также Camel) обратите внимание на следующее:

В классе org.apache.camel.management.DefaultManagementAgent:

cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);

Это, в свою очередь, позже создает экземпляр javax.management.remote.rmi.RMIJRMPServerImpl с пустой картой для аргумента конструктора env.

Теперь мне интересно, есть ли что-то, что просто ускользает от меня - когда позже приходит запрос к соединителю, и javax.management.remote.rmi.RMIServerImpl выполняет doNewClient(), он не может инициировать какую-либо активность JAAS?

Строка 197-208 RMIServerImpl — помните, что Camel устанавливает для «env» значение null, что переводится как пустая карта:

JMXAuthenticator authenticator =
    (JMXAuthenticator) env.get(JMXConnectorServer.AUTHENTICATOR);
if (authenticator == null) {
    /*
     * Create the JAAS-based authenticator only if authentication
     * has been enabled
     */
    if (env.get("jmx.remote.x.password.file") != null ||
    env.get("jmx.remote.x.login.config") != null) {
    authenticator = new JMXPluggableAuthenticator(env);
    }
}

Правильно ли я предполагаю, что для удаленного доступа, JAAS аутентифицировал JMX для работы, нужно вручную закодировать настройку коннектора JMX RMI?

Разве Camel не должен был предоставить среду для работы JAAS? Кажется, даже не касается конфигурационного файла JAAS...

ОБНОВЛЕНИЕ: РЕШЕНО

Установка следующих системных свойств на виртуальной машине помогла:

-Dcom.sun.management.jmxremote=true 
-Dcom.sun.management.jmxremote.port=9410
-Dcom.sun.management.jmxremote.authenticate=true
-Djmx.remote.x.login.config=StagingJmxAuthConfig
-Dorg.apache.camel.jmx.usePlatformMBeanServer=true
-Djava.security.auth.login.config=./src/main/resources/conf/ldap-auth.config
-Dcom.sun.management.jmxremote.ssl=false 
-Dorg.apache.camel.jmx.createRmiConnector=false 
-Dcom.sun.management.jmxremote.login.config=StagingJmxAuthConfig

Для нас, использующих защищенный LDAP, следующая конфигурация входа:

StagingJmxAuthConfig {
   com.sun.security.auth.module.LdapLoginModule REQUIRED
   java.naming.security.authentication="simple"
   java.naming.security.principal="cn=Directory Manager"
   java.naming.security.credentials="PASSWORD"
   userProvider="ldap://LDAPHOST:389/BASEDN"
   userFilter="(&(uid={USERNAME})(appRole=SOME_VALUE))"
   authzIdentity=monitorRole
   debug=true
   useSSL=false;
   };

Теперь я могу подключиться с помощью jmxterm:

java -jar jmxterm-1.0-alpha-4-uber.jar -l service:jmx:rmi:///jndi/rmi://THEHOST:9410/jmxrmi -u LDAPUSER -p LDAPPASS

Обратите внимание, что в имени JNDI RMI отсутствует постфикс "/camel" - похоже, это единственное отличие.

УРА!


person jhberges    schedule 08.01.2013    source источник
comment
По сути: - Использовать удаленное взаимодействие JMX с проверкой подлинности Java6 - Установить org.apache.camel.jmx.createRmiConnector=false - Установить org.apache.camel.jmx.usePlatformMBeanServer=true   -  person jhberges    schedule 09.01.2013


Ответы (1)


По сути:

  • Использовать удаленное взаимодействие JMX с проверкой подлинности Java6.
  • Установите org.apache.camel.jmx.createRmiConnector=false
  • Установите org.apache.camel.jmx.usePlatformMBeanServer=true

В приведенном выше примере также показано, как подключиться к защищенному поиском LDAP, который фактически изолирован, поскольку рассматриваемое приложение использует другой LDAP для поиска JNDI для JMS.

person jhberges    schedule 09.01.2013