SSL для Apache ActiveMQ на AWS экземпляре EC2 - PullRequest
0 голосов
/ 16 июня 2020

У меня есть приложение Java, настроенное с некоторыми самозаверяющими сертификатами, которое взаимодействует с ActiveMQ версии 5.13.0 через SSL / TLS версии 1.2. Соответствующие самоподписанные сертификаты находятся в соответствующих хранилищах ключей и доверенных хранилищах. Это соединение через TLS отлично работает на моем локальном компьютере Windows, клиенты без соответствующих сертификатов не могут связываться с брокером, а клиенты с соответствующими сертификатами могут.

Однако это не работает, когда то же самое код и хранилища ключей используются в экземпляре AWS EC2. У меня там установлена ​​та же версия ActiveMQ, и я использую те же хранилища ключей и доверенных лиц на стороне брокера и клиента. Клиенты без настроенных сертификатов могут подключаться к брокеру и обмениваться данными.

Я хотел бы понять, нужно ли настроить SSL / TLS для ActiveMQ по-другому на машине Linux или есть что-то еще, что я я отсутствует.

Фрагменты из файла 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>

1 Ответ

0 голосов
/ 18 июня 2020

Отвечая на свой вопрос. Я работаю с клиентом Java, и этот клиент подключается к порту 61714, который предназначен для SSL. Люди, работающие со стороной IoT-устройств, сказали мне, что эти устройства по умолчанию используют порт 1883 для MQTT-соединений и порт 8883 для безопасных MQTT-соединений. Это можно настроить, добавив следующую строку к транспортным соединителям:

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

Устройство имеет некоторые ограничения, из-за которых оно не может подключиться к порту SSL и опубликовать sh сообщения MQTT. С другой стороны, клиент Java не имеет проблем с подключением к порту SSL и публикацией и потреблением сообщений MQTT, поэтому добавление указанной выше строки решило эту проблему. При необходимости можно закомментировать транспортный соединитель для порта 1883, чтобы никакие клиенты без необходимых сертификатов не могли подключиться к брокеру MQTT.

...