Как включить SSL в ActiveMQ Artemis для протокола MQTT на основе хранилища ключей и хранилища доверенных сертификатов

Я установил ActiveMQ Artemis в Linux и настроил broker.xml. Я использую сертификат, но ActiveMQ Artemis использует хранилище ключей и хранилище доверенных сертификатов. Как их создать и как включить SSL для протокола MQTT?

Ниже показан файл конфигурации broker.xml.

<acceptor name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true
        sslEnabled=true;
        keyStorePath=home/certs/server-ks/server1.p12;keyStorePassword=abc@1234;
        trustStorePath=home/certs/server-ks/server1.p12;
        trustStorePassword=abc@1234;needClientAuth=true
</acceptor>

Я преобразовал сертификат (.pem) в хранилище ключей и хранилище доверенных сертификатов

keytool -import -alias rootCA -trustcacerts -file certs/ca.pem -keystore certs/activeMQ-truststore.jks

openssl pkcs12 -inkey certs/server-cert/server1.pem -in certs/server-cert/server1.pem -name server1 -export -out certs/server-ks/server1.p12

keytool -importkeystore -deststorepass abc@1234 -destkeystore certs/server-ks/server-keystore1.jks -srckeystore certs/server-ks/server1.p12 -srcstoretype PKCS12

Как и выше, я создал / преобразовал для клиентского хранилища ключей.

Мне нужно подключить брокера с помощью клиента MQTT.FX с самоподписанным клиентским хранилищем ключей.

Я не понимаю, как этого добиться. Пожалуйста, помогите мне, если у кого-нибудь есть идея.


person Sriram    schedule 07.09.2020    source источник


Ответы (1)


В самозаверяющей конфигурации обычно вы создаете сертификат и для брокера, и для клиента, экспортируете каждый, а затем импортируете сертификат брокера в хранилище доверенных сертификатов клиента и импортируете сертификат клиента в хранилище доверенных сертификатов брокера. Все это можно сделать с помощью команды Java keytool.

Взгляните на пример, который поставляется с ActiveMQ Artemis в каталоге examples/features/standard/ssl-enabled-dual-authentication. Он демонстрирует, как это сделать, например:

keytool -genkey -keystore server-side-keystore.jks -storepass secureexample -keypass secureexample -dname "CN=ActiveMQ Artemis Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
keytool -export -keystore server-side-keystore.jks -file server-side-cert.cer -storepass secureexample
keytool -import -keystore client-side-truststore.jks -file server-side-cert.cer -storepass secureexample -keypass secureexample -noprompt
keytool -genkey -keystore client-side-keystore.jks -storepass secureexample -keypass secureexample -dname "CN=ActiveMQ Artemis Client, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -keyalg RSA
keytool -export -keystore client-side-keystore.jks -file client-side-cert.cer -storepass secureexample
keytool -import -keystore server-side-truststore.jks -file client-side-cert.cer -storepass secureexample -keypass secureexample -noprompt

Вашему acceptor потребуются и sslEnabled=true, и needClientAuth=true.

person Justin Bertram    schedule 08.09.2020