Hi All,

I have been trying to configure 2 brokers with JMS bridge, ssl and
authentication.

The goal is to set up a broker "localServer" with JMS bridge that connects
to 
another broker "remoteServer1". The JMS bridge configuration works fine if
local Broker
has no ssl and authentication.  But if I add ssl and/or authentication into
the 
localbroker, it always starts with error as shown at the end of the message.


I looked through the JMS bridge doc as in: 
http://activemq.apache.org/jms-to-jms-bridge.html

but could not find the references of userName and password used for
authenticating again local server (the one which
initial the JMS bridge connections). I also tried "localUsername,
localPassword" in the configuration but with no luck.

After looking through the error stack trace and source codes, it looks like
the programs could not find the corresponding
username/password to authenticate against localServer. i.e.

        user = ((NameCallback) callbacks[0]).getName();
        char[] tmpPassword = ((PasswordCallback)
callbacks[1]).getPassword();
        if (tmpPassword == null) tmpPassword = new char[0];

        String password = users.getProperty(user); 
        // NullPointException occurred here ...

The question are:

when configuring the JMS bridge with remote server 
- how can we specify the username/password in the localBroker so that the
remoteServer can use to authenticate back to the localServer?
- how can we specify the certification keystore so that the remoteServer can
use to establish ssl connection to localServer?

Any sugguestions will be greatly appreciated.

Thanks very much

Regards

Feng Xue





-----------------------------------------------------------------------------------------------------------------
local server configuration: (uses system/manager to authenticate)
-----------------------------------------------------------------------------------------------------------------
<beans>
  <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
  <broker brokerName="authBroker" persistent="false" useJmx="false"
xmlns="http://activemq.org/config/1.0";>
    <transportConnectors>
       <transportConnector uri="ssl://localhost:61003"/>
    </transportConnectors>
  <jmsBridgeConnectors>
    <jmsQueueConnector
      outboundQueueConnectionFactory="#remoteFactory">
      <outboundQueueBridges>
        <outboundQueueBridge
          outboundQueueName="sample2.MyQueue" />
      </outboundQueueBridges>
      <inboundQueueBridges>
        <inboundQueueBridge
          inboundQueueName="sample2.MyQueue" />
      </inboundQueueBridges>
    </jmsQueueConnector>
  </jmsBridgeConnectors>
  <plugins>
      <jaasAuthenticationPlugin configuration="activemq-domain" />
      <authorizationPlugin>
        <map>
          <authorizationMap>
            <authorizationEntries>
              <authorizationEntry queue=">" read="guests,users,system"
write="guests,users,system" admin="guests,users,system" />
              <authorizationEntry queue="USERS.>" read="users" write="users"
admin="users" />
              <authorizationEntry queue="GUEST.>" read="guests"
write="guests,users" admin="guests,users" />

              <authorizationEntry topic=">" read="guests,users"
write="guests,users" admin="guests,users"/>
              <authorizationEntry topic="USERS.>" read="users" write="users"
admin="users" />
              <authorizationEntry topic="GUEST.>" read="guests"
write="guests,users" admin="guests,users" />
              <authorizationEntry topic="ActiveMQ.Advisory.>"
read="guests,users" write="guests,users" admin="guests,users"/>
            </authorizationEntries>
          </authorizationMap>
        </map>
      </authorizationPlugin>
    </plugins>
  </broker>
<!-- JMS ConnectionFactory to use remote -->
<bean id="remoteFactory"
  class="org.apache.activemq.ActiveMQConnectionFactory">
  <property name="brokerURL" value="ssl://remoteServer1:61617" />
        <property name="userName">
            <value>system</value>
        </property>
        <property name="password">
            <value>manager</value>
        </property>
</bean>
</beans>

-----------------------------------------------------------------------------------------------------------------
remoteServer1 configuration: (uses system/manager to authenticate)
-----------------------------------------------------------------------------------------------------------------
<beans>
  <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
  <broker name="BrokerEcsydtst01" useJmx="true"
xmlns="http://activemq.org/config/1.0";>
    <!-- Use the following to configure how ActiveMQ is exposed in JMX -->
    <managementContext>
       <managementContext connectorPort="1099"
jmxDomainName="org.apache.activemq"/>
    </managementContext>
    <persistenceAdapter>
        <journaledJDBC journalLogFiles="5"
dataDirectory="${activemq.base}/activemq-remoteServer1-auth-data"/>
    </persistenceAdapter>
   <transportConnectors>
      <transportConnector uri="ssl://localhost:61617?trace=true" />
    </transportConnectors>
    <networkConnectors>
      <networkConnector uri="static:(ssl://remoteServer2:61617)"
userName="system" password="manager" />
    </networkConnectors>
  <plugins>
      <jaasAuthenticationPlugin configuration="activemq-domain" />
      <authorizationPlugin>
        <map>
          <authorizationMap>
            <authorizationEntries>
              <authorizationEntry queue=">" read="guests,users,system"
write="guests,users,system" admin="guests,users,system" />
              <authorizationEntry queue="USERS.>" read="users" write="users"
admin="users" />
              <authorizationEntry queue="GUEST.>" read="guests"
write="guests,users" admin="guests,users" />

              <authorizationEntry topic=">" read="guests,users"
write="guests,users" admin="guests,users"/>
              <authorizationEntry topic="USERS.>" read="users" write="users"
admin="users" />
              <authorizationEntry topic="GUEST.>" read="guests"
write="guests,users" admin="guests,users" />
              <authorizationEntry topic="ActiveMQ.Advisory.>"
read="guests,users" write="guests,users" admin="guests,users"/>
            </authorizationEntries>
          </authorizationMap>
        </map>
      </authorizationPlugin>
    </plugins>
  </broker>
</beans>

-----------------------------------------------------------------------------------------------------------------
Error:
-----------------------------------------------------------------------------------------------------------------
INFO  BrokerService                  - ActiveMQ 4.1.0-incubator JMS Message
Broker (authBroker) is starting
INFO  BrokerService                  - For help or more information please
see: http://incubator.apache.org/activemq/
INFO  TransportServerThreadSupport   - Listening for connections at:
ssl://localServer:61003
INFO  TransportConnector             - Connector ssl://localhost:61003
Started
INFO  TransportConnector             - Connector vm://authBroker Started
ERROR JmsQueueConnector              - Failed to initialize the JMSConnector
javax.jms.JMSException: User name or password is invalid.
        at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:46)
        at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1177)
        at
org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1259)
        at
org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:447)
        at
org.apache.activemq.network.jms.JmsQueueConnector.initializeLocalQueueConnection(JmsQueueConnector.java:253)
        at
org.apache.activemq.network.jms.JmsQueueConnector.init(JmsQueueConnector.java:55)
        at
org.apache.activemq.network.jms.JmsConnector.start(JmsConnector.java:114)
        at
org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1485)
        at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:402)
        at
org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:47)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1062)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1029)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:420)
        at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
        at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
        at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:290)
        at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)
        at
org.apache.xbean.spring.context.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:161)
        at
org.apache.xbean.spring.context.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:51)
        at
org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:41)
        at
org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:57)
        at
org.apache.activemq.console.command.StartCommand.startBroker(StartCommand.java:82)
        at
org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:63)
        at
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:50)
        at
org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:79)
        at
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:50)
        at
org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:46)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.activemq.console.Main.runTaskClass(Main.java:159)
        at org.apache.activemq.console.Main.main(Main.java:91)
Caused by: java.lang.SecurityException: User name or password is invalid.
        at
org.apache.activemq.security.JaasAuthenticationBroker.addConnection(JaasAuthenticationBroker.java:84)
        at
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:82)
        at
org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:92)
        at
org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:687)
        at
org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:121)
        at
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:284)
        at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:177)
        at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:95)
        at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:65)
        at
org.apache.activemq.transport.vm.VMTransport.syncOneWay(VMTransport.java:96)
        at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:83)
        at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:43)
        at
org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:69)
        at
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:74)
        at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1171)
        ... 33 more
Caused by: javax.security.auth.login.LoginException:
java.lang.NullPointerException
        at java.util.Hashtable.get(Hashtable.java:336)
        at java.util.Properties.getProperty(Properties.java:774)
        at
org.apache.activemq.jaas.PropertiesLoginModule.login(PropertiesLoginModule.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at
javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
        at
javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
        at
javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
        at java.security.AccessController.doPrivileged(Native Method)
        at
javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
        at
javax.security.auth.login.LoginContext.login(LoginContext.java:579)
        at
org.apache.activemq.security.JaasAuthenticationBroker.addConnection(JaasAuthenticationBroker.java:77)
        at
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:82)
        at
org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:92)
        at
org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:687)
        at
org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:121)
        at
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:284)
        at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:177)
        at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:95)
        at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:65)
        at
org.apache.activemq.transport.vm.VMTransport.syncOneWay(VMTransport.java:96)
        at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:83)
        at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:43)
        at
org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:69)
        at
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:74)
        at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1171)
        at
org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1259)
        at
org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:447)
        at
org.apache.activemq.network.jms.JmsQueueConnector.initializeLocalQueueConnection(JmsQueueConnector.java:253)
        at
org.apache.activemq.network.jms.JmsQueueConnector.init(JmsQueueConnector.java:55)
        at
org.apache.activemq.network.jms.JmsConnector.start(JmsConnector.java:114)
        at
org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1485)
        at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:402)
        at
org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:47)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1062)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1029)
        at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:420)
        at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
        at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
        at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
        at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:290)
        at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)
        at
org.apache.xbean.spring.context.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:161)
        at
org.apache.xbean.spring.context.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:51)
        at
org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:41)
        at
org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:57)
        at
org.apache.activemq.console.command.StartCommand.startBroker(StartCommand.java:82)
        at
org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:63)
        at
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:50)
        at
org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:79)
        at
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:50)
        at
org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:46)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.activemq.console.Main.runTaskClass(Main.java:159)
        at org.apache.activemq.console.Main.main(Main.java:91)
        at
javax.security.auth.login.LoginContext.invoke(LoginContext.java:872)
        at
javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
        at
javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
        at java.security.AccessController.doPrivileged(Native Method)
        at
javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
        at
javax.security.auth.login.LoginContext.login(LoginContext.java:579)
        at
org.apache.activemq.security.JaasAuthenticationBroker.addConnection(JaasAuthenticationBroker.java:77)
        ... 47 more
INFO  JmsConnector                   - JMS Connector Connector:0 Started
-----------------------------------------------------------------------------------------------------------------

-- 
View this message in context: 
http://www.nabble.com/JMS-Bridge-with-ssl-%2B-authentication-issue-tf3430175s2354.html#a9562355
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to