SSL
下一个有趣的与安全相关的主题是使用 SSL 加密传输层。ActiveMQ 和 Artemis 都利用 JDK 的 Java 安全套接字扩展 (JSSE),因此迁移应该很容易。
让我们快速回顾一下 SSL 在 ActiveMQ 中的用法。首先,您需要定义 *SSL 上下文*。您可以使用 <sslContext>
配置部分在 conf/activemq.xml
中完成,例如
<sslContext>
<sslContext keyStore="file:${activemq.conf}/broker.ks" keyStorePassword="password"/>
</sslContext>
SSL 上下文定义了代理使用的密钥和信任存储。之后,您可以使用 ssl
模式设置您的传输连接器,最好再添加一些额外的选项。
<transportConnectors>
<transportConnector name="ssl" uri="ssl://127.0.0.1:61617?transport.needClientAuth=true"/>
</transportConnectors>
这些选项与 SSLServerSocket 相关,并以 URL 参数的形式指定,使用 transport.
前缀,例如上面示例中的 needClientAuth
。
在 Artemis 中,Netty 负责所有与传输层相关的事情,因此它也为我们处理 SSL。所有配置选项都直接设置在接收器上,例如
<acceptors>
<acceptor name="netty-ssl-acceptor">tcp://127.0.0.1:61617?sslEnabled=true;keyStorePath=${data.dir}/../etc/broker.ks;keyStorePassword=password;needClientAuth=true</acceptor>
</acceptors>
请注意,我们使用了相同的 Netty 连接器模式,只是添加了 sslEnabled=true
参数来使用 SSL。接下来,我们可以继续定义密钥和信任存储。两个代理之间在参数命名方面存在细微差异,如以下表格所示。
ActiveMQ | Artemis |
---|---|
keyStore | keyStorePath |
keyStorePassword | keyStorePassword |
trustStore | trustStorePath |
trustStorePassword | trustStorePassword |
最后,您可以设置您需要的其他 SSLServerSocket
参数(例如本示例中的 needClientAuth
)。在 Artemis 中不需要额外的前缀。
需要注意的是,您应该能够重用现有的密钥和信任存储,并将它们复制到新的代理。