如何在ActiveMQ Artemis中为基于keystore和truststore的MQTT协议启用SSL

How to enable SSL in ActiveMQ Artemis for MQTT protocol based on keystore and truststore

我已经在 Linux 中安装了 ActiveMQ Artemis 并配置了 broker.xml。我正在使用证书,但 ActiveMQ Artemis 使用密钥库和信任库。如何创建这些以及如何为 MQTT 协议启用 SSL?

下面显示配置 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

同上,我有 created/converted 用于客户端密钥库。

我需要使用 MQTT.FX 客户端和自签名客户端密钥库来连接代理。

如何实现这一点我感到困惑。如果有人有想法,请帮助我。

在 self-signed 配置中,您通常会为代理和客户端创建一个证书,分别导出,然后将代理的证书导入客户端的信任库,并将客户端的证书导入代理的信任库.您可以使用 Java 的 keytool 命令完成所有这些操作。

查看 examples/features/standard/ssl-enabled-dual-authentication 目录中 ActiveMQ Artemis 附带的示例。它演示了如何执行此操作,例如:

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=trueneedClientAuth=true