SSL
下一個有趣的安全性相關主題是使用 SSL 加密傳輸層。ActiveMQ 和 Artemis 都利用 JDK 的 Java Secure Socket Extension (JSSE),因此遷移應該很容易。
讓我們快速回顧一下 SSL 在 ActiveMQ 中的使用方式。首先,您需要定義 *SSL Context*。您可以使用 conf/activemq.xml
中的 <sslContext>
組態區段來執行此操作,例如:
<sslContext>
<sslContext keyStore="file:${activemq.conf}/broker.ks" keyStorePassword="password"/>
</sslContext>
SSL 上下文定義了 broker 要使用的金鑰和信任儲存。完成此操作後,您可以使用 ssl
schema 設定您的傳輸連接器,最好還有一些額外的選項。
<transportConnectors>
<transportConnector name="ssl" uri="ssl://127.0.0.1:61617?transport.needClientAuth=true"/>
</transportConnectors>
這些選項與 SSLServerSocket 有關,並以 URL 參數形式指定,帶有 transport.
前綴,例如上面範例中顯示的 needClientAuth
。
在 Artemis 中,Netty 負責與傳輸層相關的所有事項,因此它也為我們處理 SSL。所有組態選項都直接在 acceptor 上設定,例如:
<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 連接器 schema,並且僅添加了 sslEnabled=true
參數以將其與 SSL 一起使用。接下來,我們可以繼續定義金鑰和信任儲存。如下表所示,兩個 broker 之間的參數命名略有差異。
ActiveMQ | Artemis |
---|---|
keyStore | keyStorePath |
keyStorePassword | keyStorePassword |
trustStore | trustStorePath |
trustStorePassword | trustStorePassword |
最後,您可以繼續設定您需要的所有其他 SSLServerSocket
參數 (例如此範例中的 needClientAuth
)。在 Artemis 中,不需要額外的前綴。
請務必注意,您應該能夠重複使用現有的金鑰和信任儲存,只需將它們複製到新的 broker 即可。