簽署憑證提供的伺服器認證,比自我簽署憑證的伺服器認證更安全。您只能在用戶端和代理程式之間 (不能在叢集的多個代理程式之間) 實作簽署憑證。除了上述配置自我簽署憑證所需步驟之外,您還需要執行下列額外的步驟。後續小節會詳細說明這些步驟。
下列程序說明如何取得並安裝簽署的憑證。
使用 J2SE keytool 指令,為您在上節中產生的自我簽署憑證,產生憑證簽署請求 (CSR)。
下列網站提供有關 keytool 指令的資訊:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html
範例:
keytool -certreq -keyalg RSA -alias imq -file certreq.csr -keystore /etc/imq/keystore -storepass myStorePassword |
這會產生 CSR,將憑證封裝在指定的檔案中 (此範例中的 certreq.csr )。
使用 CSR 產生或請求簽署的憑證。
您可以使用下列方法之一:
請 Thawte 或 Verisign 等知名的憑證授權單位 (CA) 簽署憑證。如需如何執行此作業的詳細資訊,請參閱您的 CA 文件。
使用 SSL 簽署套裝軟體,自行簽署憑證。
簽出的憑證是一串 ASCII 字元。如果您收到 CA 簽署的憑證,它可能是一個電子郵件附件或是郵件中的文字。
將簽署的憑證儲存在檔案中。
以下說明中,使用 broker.cer 範例名稱來代表代理程式憑證。
檢查 J2SE 依預設是否支援您的憑證授權單位。
以下指令會列出系統金鑰庫中的根 CA:
keytool -v -list -keystore $JAVA_HOME/lib/security/cacerts
如果有列出您的 CA,請跳過下一個步驟。
如果 J2SE 未支援您的憑證授權單位,請將 CA 的根憑證匯入 Message Queue 金鑰庫中。
範例:
keytool -import -alias ca -file ca.cer -noprompt -trustcacerts -keystore /etc/imq/keystore -storepass myStorePassword
其中 ca.cer 檔案包含 CA 提供的根憑證。
如果您使用 CA 測試憑證,可能需要匯入測試 CA 根憑證。您的 CA 應該會指示如何取得該憑證的副本。
將簽署的憑證匯入金鑰庫中,替代原始的自我簽署憑證。
範例:
keytool -import -alias imq -file broker.cer -noprompt -trustcacerts -keystore /etc/imq/keystore -storepass myStorePassword
broker.cer 是您從 CA 獲得的簽署憑證所在的檔案。
現在 Message Queue 金鑰庫包含簽署憑證,可用於 SSL 連線。
現在您必須配置 Message Queue 用戶端執行階段以請求簽署的憑證,並確保用戶端信任簽署此憑證的憑證授權單位。
將連線工廠的 imqSSLIsHostTrusted 屬性設定為 false。
依預設,用戶端將用來建立代理程式連線的連線工廠物件之 imqSSLIsHostTrusted 屬性設定為 true,這表示用戶端執行階段會接受所出示的任何憑證。您必須將此值變更為 false,讓用戶端執行階段嘗試驗證所出示的所有憑證。如果憑證簽署者未出現在用戶端的信任清單存放區,驗證便會失敗。
驗證簽署的授權單位是否已在用戶端的信任清單存放區中註冊。
若要測試用戶端是否會接受您的憑證授權單位所簽署的憑證,請嘗試建立 SSL 連線,如上節配置並執行 SSL 型用戶端中所述。如果 CA 列在用戶端的信任存放區中,連線便會成功,您可以跳過下一個步驟。如果連線失敗出現憑證驗證錯誤,請執行下一個步驟。
在用戶端的信任存放區中安裝簽署 CA 的根憑證。
依預設,用戶端會搜尋金鑰庫檔案 cacerts 和 jssecacerts,因此如果憑證安裝在以上其中一個檔案中,便不需要進一步配置。下列範例會將來自 Verisign 憑證授權單位,檔名為 testrootca.cer 的測試根憑證檔案,安裝到預設系統憑證檔案 cacerts 。此範例假設 J2SE 安裝在 $JAVA_HOME/usr/j2se 目錄中:
keytool -import -keystore /usr/j2se/jre/lib/security/cacerts -alias VerisignTestCA -file testrootca.cer -noprompt -trustcacerts -storepass myStorePassword
建議使用的替代選項,是將根憑證安裝到替代系統憑證檔案 jssecacerts:
keytool -import -keystore /usr/j2se/jre/lib/security/jssecacerts -alias VerisignTestCA -file testrootca.cer -noprompt -trustcacerts -storepass myStorePassword
第三個可能方法是將根憑證安裝到其他金鑰庫檔案中,並且配置用戶端將其視為信任存放區。下列範例會安裝到 /home/smith/.keystore 檔案中:
keytool -import -keystore /home/smith/.keystore -alias VerisignTestCA -file testrootca.cer -noprompt -trustcacerts -storepass myStorePassword
由於用戶端依預設不會搜尋此金鑰庫,因此您必須明確向用戶端提供此位置作為信任存放區。若要執行這項操作,請在用戶端執行時,設定 Java 系統特性 javax.net.ssl.trustStore:
javax.net.ssl.trustStore=/home/smith/.keystore