Activemq setup
Panoramica
In questo documento si vuole documentare come installare un Apache Activemq con accesso alle code tramite passwd e uso di canale cifrato fuori da localhost.
Setup
Creare un utente activemq.
Rendere avviabile come servizio unix (va bene del CentOS).
Se si usa Debian provare questo script che è lo script di avvio di tomcat6 modificato a mano.
La cartella $ACTIVEMQ_HOME/data deve diventare proprietaria dell'utente activemq. Si creano due soft link a $ACTIVEMQ_HOME chiamati rispettivamente apache-activemq e activemq, nella cartella che contiene $ACTIVEMQ_HOME.
Siccome si userà lo SSL, è necessario modificare gli script $ACTIVEMQ_HOME/bin/activemq e $ACTIVEMQ_HOME/bin/activemq-admin: si decommenta la sezione in cui si permette a JMX un accesso senza SSL e senza autenticazione:
if [ -z "$SUNJMX" ] ; then SUNJMX="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" #SUNJMX="-Dcom.sun.management.jmxremote" fi
Senza questa modifica, fallisce il comando /etc/init.d/activemq stop.
Può essere necessario modificare a mano anche la variabile saveddir e la porta di connessione JMX (da 1616 a 1099), se non funziona.
Inoltre si consiglia di editare $ACTIVEMQ_HOME/conf/log4j.properties e togliere i valori "stdout" o "console" dalla riga:
log4j.rootLogger=INFO, out
(altrimenti arriva troppo log sulla console).
Se allo stop si riceve un messaggio che lamenta che la porta JMX è occupata,
Stopping Apache ActiveMQ Message Broker: Errore: Eccezione dell'agente : java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use
ho trovato la soluzione in questo articolo.
Password
Partire dal documento di riferimento. Le informazioni utili sono quelle del primo schema di autenticazione (NON quello simple).
Creare in $ACTIVEMQ_HOME/conf il file login.config (come da documento di riferimento);
in $ACTIVEMQ_HOME/conf lanciare
mkdir -p org/apache/activemq/security/
Nella directory creata copiare i due file users.properties e groups.properties, come da esempio nel documento di riferimento, dopo aver modificato la passwd dell'utente system o, ancora meglio, dopo aver creaton un altro username con una sua passwd nel gruppo users e admins.
Accertarsi che il file $ACTIVEMQ_HOME/conf/credentials.properties contenga username e passwd dell'utente system o equivalente.
Aggiungere in $ACTIVEMQ_HOME/conf/activemq.xml, dentro la sezione broker:
<plugins> <jaasAuthenticationPlugin configuration="activemq-domain" /> <authorizationPlugin> <map> <authorizationMap> <authorizationEntries> <authorizationEntry queue=">" read="users" write="users" admin="users" /> <authorizationEntry queue="USERS.>" read="users" write="users" admin="users" /> <authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" /> <authorizationEntry topic=">" read="users" write="users" admin="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>
In cui activemq-domain e' la keywork del file login.config e USERS e GUESTS sono due code di esempio da personalizzare nel proprio caso.
Mettere al sicuro la web console sulla porta 8161
Invece di configurare JAAS per usare le credenziali create nella sezione precedente, usare una proxy inversa con apache dalla porta 443 alla 8161 e poi autenticare con shibboleth o ldap.
ssl
Partire dalla documentazione: è necessario creare un truststore che contiene la chiave privata ed un client store con le CA.
Per mettere una chiave privata tipo EuroPKI dentro un keystore java, non ho trovato altri sistemi che extkeytool di shibboleth1.3, che implica scaricare ed installare (ma non configurare) il pacchetto.
Poi sarà necessario aggiungere all'altezza della sezione connection (cioé alla pari, sotto la sezione broker) una sezione:
<sslContext> <sslContext keyStore="server.store" keyStorePassword="secret" trustStore="client.ks" trustStorePassword="password"/> </sslContext>