Как клиент получает SSL-сертификат от брокера ActiveMQ?

#ssl #activemq

#ssl #activemq ( активированный уголь ) #activemq

Вопрос:

У меня есть брокер ActiveMQ, работающий на AWS. Я пытаюсь защитить соединения от клиентов, используя SSL. Я настроил брокера на использование SSL, но я не совсем понимаю, откуда клиенты должны получать сертификат. Нужно ли мне скопировать сертификат от брокера и упаковать его с клиентским кодом? Или мне удаленно извлекать сертификат программно при каждом запуске клиента?

Соответствующая настройка SSL в activemq.xml

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

 <transportConnectors>
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000amp;amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ssl" uri="ssl://0.0.0.0:61714?transport.enabledProtocols=TLSv1.2"/>
</transportConnectors>
  

Подключающимися клиентами будут Java-клиенты, использующие JMS. На данный момент я использую сертификат по умолчанию, который поставляется в комплекте с установкой ActiveMQ.

Комментарии:

1. Я добавил соответствующие конфигурации ssl от брокера в исходное сообщение. Подключающимися клиентами будут Java-клиенты, использующие JMS. На данный момент я использую сертификат по умолчанию, который поставляется в комплекте с установкой ActiveMQ.

Ответ №1:

Как указано в документации ActiveMQ:

ActiveMQ включает хранилища ключей и доверия, которые ссылаются на фиктивный самозаверяющий сертификат. Когда вы создаете сертификат брокера и хранилища для своей установки, либо перезапишите значения в каталоге conf, либо удалите существующий фиктивный ключ и хранилища доверия, чтобы они не могли вмешиваться)

Поэтому вам следует удалить существующие broker.ks и broker.ts и создать новые для вашей установки. Здесь у вас есть несколько вариантов.

Я полагаю, что AWS имеет какую-то инфраструктуру для получения SSL-сертификатов и что эти сертификаты будут подписаны хорошо известным центром сертификации, которому будут безоговорочно доверять ваши клиенты JMS. Быстрый поиск выдал AWS Certificate Manager.

Однако у вас также есть возможность использовать «самозаверяющий» сертификат, который по определению не подписан хорошо известным центром сертификации и, следовательно, должен быть явно доверенным вашими клиентами.

Вы можете использовать самоподписанный маршрут, используя следующие команды:

  1. Используя keytool (из JDK), создайте сертификат для брокера:
     keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
      
  2. Экспортируйте сертификат брокера, чтобы им можно было поделиться с клиентами:
     keytool -export -alias broker -keystore broker.ks -file broker_cert
      
  3. Создайте сертификат / хранилище ключей для клиента:
     keytool -genkey -alias client -keyalg RSA -keystore client.ks
      
  4. Создайте хранилище доверия для клиента и импортируйте сертификат брокера. Это подтверждает, что клиент «доверяет» брокеру:
     keytool -import -alias broker -keystore client.ts -file broker_cert
      

При запуске виртуальной машины клиента укажите следующие системные свойства:

 javax.net.ssl.trustStorePassword=password
javax.net.ssl.trustStore=/path/to/client.ts
  

Если вы выбираете самоподписанный маршрут, то вам нужно только один раз сгенерировать client.ts, а затем скопировать его каждому клиенту. Клиенты будут использовать одно и то же хранилище доверия при каждом подключении (при условии, что сертификат брокера не меняется).