Как клиент получает сертификат SSL от брокера ActiveMQ? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть брокер 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=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="ssl" uri="ssl://0.0.0.0:61714?transport.enabledProtocols=TLSv1.2"/>
</transportConnectors>

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

1 Ответ

0 голосов
/ 28 марта 2019

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

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

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

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

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

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

  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 один раз, а затем скопировать его каждому клиенту. Клиенты будут использовать одно и то же хранилище доверенных сертификатов при каждом подключении (при условии, что сертификат брокера не изменится).

...