dicembre 17, 2017

Configurare connessioni sicure SSL su ActiveMQ

In un precedente articolo ho mostrato come configurare ActiveMQ in alta affidabilità in modalità Master/Slave. Vediamo ora come rendere sicure le connessioni verso il broker sfruttando il protocollo SSL. ActiveMQ usa JSSE (Java Secure Socket Extension) per il supporto a connessioni sicure tramite certificato SSL. In questo articolo faccio un esempio di connessione SSL “trusted” sia lato client sia lato server. Tale connessione può essere instaurata sia dichiarando le proprietà Java SSL relative al certificato direttamente in un profilo Maven, sia utilizzando con Spring la connection factory SSL di ActiveMQ.

ROADMAP

1. Creazione certificato SSL self-signed  (keystore e truststore)
2. Abilitazione connessioni SSL su ActiveMQ
3. Setup client SSL con JSSE su profilo Maven
4. Setup client SSL con Spring

1.  Creazione certificato SSL self-signed  (keystore e truststore)

Per creare il proprio certificato SSL self-signed viene utilizzato “keytool“.

2. Abilitazione connessioni SSL su ActiveMQ

Per configurare una connessione SSL su ActiveMQ è necessario definire la posizione dove risiedono i file keystore e truststore sul server. Copiamo i file creati al passo precedente nella directory conf del broker.

Ora definiamo l’elemento <transportConnector> nel file ${ACTIVEMQ_HOME}/conf/activemq.xml file e specifichiamo il parametro “needClientAuth=true” per obbligare il broker ad accettare connessioni trusted SSL autenticate attraverso il file truststore con password.

Se non ci sono errori all’avvio il broker dovrebbe visualizzare il seguente messaggio in console.

 activemq-and-ssl-transport-screen01

 

3. Setup client SSL con JSSE su profilo Maven

Per ActiveMQ, la stringa di connessione SSL e del tipo ssl://hostname:port?key=value. In una configurazione di ActiveMQ in modalità Master/Slave è necessario definire una stringa del tipo failover:(ssl://amq01:61617,ssl://amq02:61617)?randomize=false. In questo esempio viene utilizzato l’oggetto ResouceBundle per esternalizzare  alcune proprietà come appunto la stringa di connessione al broker. Il file da modificare è activemq-samples/ssl-transport/src/main/resources/configuration.properties

La classe che definisce il Producer è activemq-samples/ssl-transport/src/main/java/activemq/samples/ssltransport/Producer.java

Quando viene utilizzato JSSE è necessario definire le proprietà di sistema con le informazioni legate al keystore e al truststore. E’ possibile impostare la variabile JAVA_OPTS con le seguenti proprietà.

Tali proprietà possono essere dichiarate anche con Maven utilizzando il plugin “exec-maven-plugin“. In questo esempio ho creato un profilo Maven per impostare a runtime le proprietà SSL legate al certificato. In questo modo posso lanciare più comodamente diversi client, ovvero Producer e Consumer, ognuno con il proprio certificato SSL. Ecco un esempio per il Producer nel file activemq-samples/ssl-transport/pom.xml

Compilare e lanciare maven su “exec:java”

Se non ci sono errori, dovrebbe comparire il seguente messaggio in console.

activemq-and-ssl-transport-screen02

 

4. Setup client SSL con Spring

Se il client è stato implementato utilizzando Spring, è possibile definire una propria Connection Factory JMS SSL usando l’oggetto org.apache.activemq.ActiveMQSslConnectionFactory. Il file in cui viene definito il bean è activemq-samples/ssl-transport/src/main/resources/SpringBeans-Producer.xml 

Related posts

Leave a Reply

Your email address will not be published.