ActiveMQ mit SSL betreiben

Nachdem wir kürzlich zum ersten Mal die ActiveMQ mit SSL einrichten durften, ist hier als Referenz, wie wir vorgegangen sind.

Die Zertifikate wurden uns freundlicherweise vorab bereitgestellt.

Keystore Explorer

Im Keystore Explorer wird ein neues ks-File broker-ecmind.ks angelegt; In diesem wird nun das bereitgestellte KeyPair bundle.p12 importiert. Der Keystore wird dann direkt als z.B. als broker-ecmind.ks gespeichert und ins conf-Verzeichnis der AMQ kopiert. Das beim Speichern im Keystore hinterlegte Passwort, muss gemerkt und in der AMQ-Config hinterlegt werden.

ActivemQ conf-Verzeichnis

Die oben erstellte broker-ecmind.ks- Datei soll ins conf-Verzeichnis der ActiveMQ gelegt werden.

In der jetty.xml wird das Element bean id="Connector" deaktiviert und dafür bean id="SecureConnector" aktiviert. KeystorePath und keyStorePasword innerhalb des Elements korrekt auf die zuvor definierten Werte setzen. bean id="handlers" muss in der Klasse hinten ein $Server angehängt bekommen, so dass sich folgende Zeile ergibt: <bean id="handlers" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">.

Im Element bean id="jettyPort" den Port auf 8162 ändern.

In activemq.xml die transportConnectors für openwire und stomp wie folgt anpassen:

<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61616?transport.enabledProtocols=TLSv1.2&amp;maximumConnections=1000&amp;wireFormat.maxFrameSize=1048576000"/>
<transportConnector name="stomp+ssl" uri="stomp+nio+ssl://0.0.0.0:61613?transport.enabledProtocols=TLSv1.2&amp;maximumConnections=1000&amp;wireFormat.maxFrameSize=1048576000"/>

ActiveMQ Start

Beim Start der ActiveMQ muss der Parameter "ACTIVEMQ_SSL_OPTS": "-Djavax.net.ssl.keyStore=D:/apps/activemq/conf/broker-ecmind.ks -Djavax.net.ssl.keyStorePassword=ecmind"mitgegeben werden. Wird die ActiveMQ über suvi betrieben, wird das im json als env mitgegeben.

TaxViewer.dll.config

Damit der TaxViewer via SSL mit der ActiveMQ kommuniziert müssen die beiden Settings LogUri und ECMUri wie folgt angepasst werden (Full Qualified Domain Name, so wie im Zertifikat hinterlegt einfügen):

           <setting name="LogUri" serializeAs="String">
               <value>activemq:ssl://TESTUMGEBUNG.ch:61616?transport.SslProtocol=Tls12</value>
            </setting>
            <setting name="ECMUri" serializeAs="String">
                <value>activemq:ssl://TESTUMGEBUNG.ch:61616?wireFormat.tightEncodingEnabled=false&amp;transport.SslProtocol=Tls12</value>
            </setting>

Sämtliche Python-Jobs

Alle Python-Jobs, die auf die ActiveMQ zugreifen, müssen ssl importieren und beim Verbindungsaufbau ssl setzen:

import ssl 
queue_client = stomp.Connection([(
        config['queue']['host'],
        int(config['queue']['port'])
    )])
    queue_client.set_ssl(for_hosts=[(
        config['queue']['host'],
        int(config['queue']['port'])
    )], ssl_version=ssl.PROTOCOL_TLS)
    queue_client.connect(config['queue']['username'],
                        config['queue']['password'], wait=True)

Zusätzlich musste in sämtlichen config.toml-Dateien der Hostname auf den Full Qualified Domain Name, so wie im Zertifikat vermerkt, angepasst werden.

2 „Gefällt mir“

Coole Sache, freut mich, dass alles geklappt hat!