如何使用 SSL

社群 > 常見問題 > 使用 Apache ActiveMQ Classic > 如何使用 SSL

設定金鑰與信任儲存區

另請參閱 Tomcat 的 SSL 指示 以獲取更多資訊。以下內容由 Colin Kilburn 提供。感謝 Colin!

ActiveMQ Classic 預設使用虛擬憑證

ActiveMQ Classic 包含參考虛擬自簽憑證的金鑰和信任儲存區。當您為您的安裝建立代理程式憑證和儲存區時,請覆寫 conf 目錄中的值,或刪除現有的虛擬金鑰和信任儲存區,以避免它們干擾。

  1. 使用 keytool,為代理程式建立憑證
    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.* 系統屬性

在啟動代理程式的 VM 之前,請設定 ACTIVEMQ_SSL_OPTS 環境變數,使其知道使用代理程式金鑰儲存區。(請注意,在先前版本的 ActiveMQ Classic 中,此屬性在某些腳本中稱為 SSL_OPTS。自 v5.12.0 起,所有腳本都使用 ACTIVEMQ_SSL_OPTS)

export ACTIVEMQ_SSL_OPTS = -Djavax.net.ssl.keyStore=/path/to/broker.ks -Djavax.net.ssl.keyStorePassword=password

使用 Spring 為代理程式實例設定 SSL

有時使用 javax.net.ssl.* 系統屬性並不適當,因為它們會影響 JVM 中的所有 SSL 使用者。ActiveMQ Classic 5.2.x 新增了一個元素,允許設定特定於代理程式的 SSL 屬性集。

SslContext 測試案例 驗證了使用在代理程式 Xbean 中指定的組態來啟動 SSL 傳輸監聽器。SslContext 元素會如下加入到代理程式中

SslContext 用於設定該代理程式的 SslTransportFactory。可在 綱要定義org.apache.activemq.spring.SpringSslContext 的存取器中看到可用的組態選項的完整詳細資訊

啟動客戶端

在啟動客戶端的 VM 時,請指定以下系統屬性

javax.net.ssl.keyStore=/path/to/client.ks
javax.net.ssl.keyStorePassword=password
javax.net.ssl.trustStore=/path/to/client.ts

在 Linux 中,請勿使用金鑰儲存區的絕對路徑。預設情況下,keytool 使用 ~/.keystore,但在某些設定中,將 -Djavax.net.ssl.keyStore=/home/account/.keystore 傳遞給 Java VM 無法運作。這並非 ActiveMQ Classic 特有,但無論如何都值得記住。

客戶端憑證

如果您想要驗證客戶端憑證,您需要執行一些額外的步驟

  1. 匯出客戶端的憑證,以便可以與代理程式共享
    keytool -export -alias client -keystore client.ks -file client_cert
    
  2. 為代理程式建立信任儲存區,並匯入客戶端的憑證。這確立代理程式「信任」客戶端
    keytool -import -alias client -keystore broker.ts -file client_cert
    
  3. -Djavax.net.ssl.trustStore=/path/to/broker.ts
    

    加入至 ACTIVEMQ_SSL_OPTS

  4. 透過在 activemq.xml 中設定以下內容,指示 ActiveMQ Classic 需要客戶端驗證

憑證撤銷

5.12 版本開始,您可以在 SSL 上下文中定義憑證撤銷清單 (CRL) 路徑,以便可以撤銷無效的憑證

<sslContext>
    <sslContext keyStore="org/apache/activemq/security/broker1.ks"
                keyStorePassword="password"
                trustStore="org/apache/activemq/security/activemq-revoke.jks"
                trustStorePassword="password"
                crlPath="org/apache/activemq/security/activemq-revoke.crl"/>
</sslContext>

此清單是靜態的,並在代理程式啟動時載入。

5.14.0 版本開始,您也可以啟用更進階的線上憑證狀態協議 (OCSP) 協定。為此,您需要透過設定適當的系統屬性(在 ${ACTIVEMQ_HOME}/bin/env 中)來設定 java.security 組態延伸的位置,例如

ACTIVEMQ_SSL_OPTS="-Djava.security.properties=$ACTIVEMQ_CONF/java.security"

然後,您需要在 java.security 檔案中設定 OCSP 回應器屬性,例如

ocsp.enable=true ocsp.responderURL=<http://ocsp.example.net:80>

可以在 https://github.com/dejanb/sslib 找到使用 OCSP 回應器的代理程式組態示範

解決 Java 7 SSL 錯誤

如 AMQ-5970 問題所述,某些版本的 Java 7 似乎在使用需要 Diffie-Hellman 密碼套件的 SSL 會話時存在問題。如果您遇到此問題,只需將 Bouncy Castle bcprov-jdk15on-148.jar 複製到 ActiveMQ Classic 的 lib 目錄,然後重新啟動您的代理程式。

這些連結也可能有所幫助

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。版權所有 © 2024,Apache 軟體基金會。依據 Apache 授權條款 2.0 授權。