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

#ssl #mqtt #activemq-artemis

#ssl #mqtt #activemq-artemis

Вопрос:

Я установил ActiveMQ Artemis в Linux и настроил broker.xml . Я использую сертификат, но ActiveMQ Artemis использует хранилище ключей и truststore. Как их создать и как включить 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) в хранилище ключей и truststore

 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, к самоподписанному хранилищу ключей клиента.

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

Ответ №1:

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

Взгляните на пример, который поставляется с 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 .