我有一个ActiveMQ经纪人住在AWS上。我试图使用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&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ssl" uri="ssl://0.0.0.0:61714?transport.enabledProtocols=TLSv1.2"/>
</transportConnectors>连接的客户端将是使用JMS的Java客户机。此时,我使用的是随ActiveMQ安装一起打包的默认证书。
发布于 2019-03-28 18:21:41
正如ActiveMQ文档所说:
ActiveMQ包含引用虚拟自签名证书的密钥和信任存储。当您创建代理证书并存储安装时,可以覆盖conf目录中的值,或者删除现有的虚拟密钥和信任存储,这样它们就不会干扰)
因此,您应该删除现有的broker.ks和broker.ts,并为您的安装创建新的。你有几个选择。
我设想AWS有某种获取SSL证书的基础设施,并且这些证书将由一个众所周知的证书颁发机构签名,而JMS客户端将隐式地信任这些证书。一个快速搜索发现了AWS证书经理。
但是,您还可以选择使用“自签名”证书,根据定义,该证书不是由著名的证书颁发机构签名的,因此必须得到客户端的明确信任。
您可以使用以下命令选择自签名路由:
keytool (来自JDK),为代理创建一个证书: keytool -genkey -alias broker -keyalg RSA -keystore broker.ks启动客户端的VM时,请指定以下系统属性:
javax.net.ssl.trustStorePassword=password
javax.net.ssl.trustStore=/path/to/client.ts如果选择自签名路由,则只需生成一次client.ts,然后将其复制到每个客户端。每次连接时,客户端都会使用相同的信任存储库(假设代理的证书没有更改)。
https://stackoverflow.com/questions/55403432
复制相似问题