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&maximumConnections=1000&wireFormat.maxFrameSize=1048576000"/>
<transportConnector name="stomp+ssl" uri="stomp+nio+ssl://0.0.0.0:61613?transport.enabledProtocols=TLSv1.2&maximumConnections=1000&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&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.