客户端如何从ActiveMQ Broker获得SSL证书?

时间:2019-03-28 17:15:29

标签: ssl activemq

我有一个住在AWS上的ActiveMQ Broker。我正在尝试使用SSL保护来自客户端的连接。我已经将代理设置为使用SSL,但是我不太了解客户端应该从何处获取证书。我是否需要从代理复制证书并将其与客户代码打包在一起?还是在每次启动客户端时以编程方式远程检索证书?

activemq.xml中的相关SSL设置

<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>

连接的客户端将是使用JMS的Java客户端。此时,我正在使用ActiveMQ安装随附的默认证书。

1 个答案:

答案 0 :(得分:0)

ActiveMQ documentation指出:

  

ActiveMQ包括密钥和信任存储,它们引用了虚拟的自签名证书。创建代理证书并存储安装时,请覆盖conf目录中的值,或者删除现有的虚拟密钥和信任库,以免干扰)

因此,您应该删除现有的broker.ksbroker.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
    

启动客户端的VM时,请指定以下系统属性:

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

如果选择自签名路由,则只需生成一次client.ts,然后将其复制到每个客户端。每次连接时,客户端将使用相同的信任库(假定代理的证书不变)。