You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Feng Xue <fe...@macquarie.com> on 2007/03/19 23:37:33 UTC
JMS Bridge with ssl + authentication issue
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.