繁体   English   中英

SSL 用于 AWS EC2 实例上的 Apache ActiveMQ

[英]SSL for Apache ActiveMQ on AWS EC2 instance

我有一个 Java 应用程序配置了一些自签名证书,这些证书通过 SSL/TLS 版本 1.2 与 ActiveMQ 版本 5.13.0 通信。 相关的自签名证书驻留在其各自的密钥库和信任库中。 这种通过 TLS 的连接在我的本地 Windows 机器上运行良好,没有正确证书的客户端无法与代理通信,而具有正确证书的客户端可以。

但是,当在 AWS EC2 实例上使用相同的代码和密钥库时,这不起作用。 我在那里安装了相同版本的 ActiveMQ,并且在代理和客户端使用相同的密钥库和信任库。 没有配置任何证书的客户端能够连接到代理并进行通信。

我想了解是否必须在 Linux 机器上以不同方式配置 ActiveMQ 的 SSL/TLS,或者是否还有其他我遗漏的东西。

来自activemq.xml文件的片段,使 activemq 能够使用 SSL/TLS:

<managementContext>
    <managementContext createConnector="false"/>
</managementContext>

<sslContext> 
    <sslContext keyStore="file:${activemq.base}/conf/broker.ks"
      keyStorePassword="changeit" trustStore="file:${activemq.base}/conf/broker.ts"
      trustStorePassword="changeit"/> 
</sslContext>

<transportConnectors>
    <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxInactivityDuration=300000&amp;wireFormat.maxFrameSize=104857600&amp;jms.messagePrioritySupported=false"/>
    <transportConnector name ="ssl" uri="ssl://0.0.0.0:61714?transport.enabledProtocols=TLSv1.2"/>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

回答我自己的问题。 我处理 Java 客户端,该客户端连接到为 SSL 指定的端口 61714。 与物联网设备打交道的人告诉我,这些设备默认使用端口 1883 进行 MQTT 连接,端口 8883 用于安全 MQTT 连接。 这可以通过将以下行添加到传输连接器来配置:

<transportConnector name="mqtt+ssl" uri="mqtt+ssl://0.0.0.0:8883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

该设备有一些限制,因此无法连接到 SSL 端口并发布 MQTT 消息。 另一方面,Java 客户端连接到 SSL 端口和发布和消费 MQTT 消息没有问题,因此添加上述行解决了这个问题。 如果需要,可以注释掉端口 1883 的传输连接器,这样没有所需证书的客户端就无法连接到 MQTT 代理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM