#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
.