Liberty 中的 SSL 預設值
指定 Liberty 中的預設 SSL 憑證、金鑰儲存庫和配置。
預設憑證和金鑰儲存庫
使用者可以在 securityUtility 指令中使用 createSSLCertificate 參數,來建立自簽憑證,這是有助於開發人員著手進行的簡便工具。使用者可以從指令行直接呼叫工具,或容許伺服器呼叫該工具,以便在伺服器啟動時建立預設憑證和金鑰儲存庫。
<keyStore id="defaultKeyStore" password="yourPassword" />
如果已有 defaultKeyStore 的金鑰儲存庫配置,但在伺服器啟動時,金鑰儲存庫不存在,則伺服器會呼叫 createSSLCertificate 參數。這個參數會使用配置中指定的密碼來建立金鑰儲存庫。
- 位置:金鑰儲存庫檔稱為 key.jks,並且位於伺服器或用戶端的 resources/security 目錄中。
- 金鑰儲存庫類型:金鑰儲存庫類型是 JKS。
- 密碼:配置中提供的密碼。
- 類型:憑證是自簽憑證。
- 大小:預設憑證大小是 2048。
- 簽章演算法:憑證的簽章演算法是 SHA256WITHRSA。
- 有效性:憑證的有效期是 365 天。
- SubjectDN:以 CN=<hostname>,OU=<client or server name>,O=ibm,C=US as the SubjectDN 來建立憑證。
如果使用者想自訂憑證,可在指令行中呼叫 createSSLCertificate 參數。
預設 SSL 配置
SSL 最起碼所需的配置是一個稱為 defaultKeyStore 的單一金鑰儲存庫元素。當 defaultKeyStore 存在於配置中,執行時期會在其周圍建置一項稱為 defaultSSLConfig 的 SSL 配置。
defaultSSLConfig 詳細資料:
- 通訊協定:當使用 IBM® JRE 時,依預設,會將通訊協定設為 SSL_TLSv2。如果使用 Oracle JRE,會以 SSL 作為通訊協定。
- 密碼:會從基礎 JRE 取得支援的密碼清單,來建置密碼清單。依預設,清單會縮減成都是 128 位元(及以上)或 3DES 的密碼。會移除 RC4,因為啟用它們不被視為安全。會移除 ECDHE 密碼,因為如果您要前往的伺服器不支援這類密碼,可能會造成錯誤。您可以自訂密碼清單來包含它們。
- 用戶端鑑別:依預設,會停用 clientAuthentication 和 clientAuthenticationSupported。
- 金鑰儲存庫:在預設配置中,defaultKeyStore 同時作為金鑰和信任儲存庫。
您可以在 server.xml 檔中輸入一個稱為 defaultSSLConfig 的 SSL 元素,來自訂 SSL 配置內容。只要未將不同的 SSL 配置識別為預設值,仍會將稱為 defaultSSLConfig 的自訂 ssl 元素視為預設 SSL 配置。如需相關資訊,請參閱 SSL 配置屬性。
<sslDefault sslRef="customSSLConfiguration" />
會使用 Liberty 預設 SSL 配置中的屬性,來建立 SSLContext。會使用 Java™ API SSLContext.setDefault(),在程序中設定該 SSLContext 來作為預設 SSLContext。如果應用程式使用 https URL 來呼叫 httpURLConnection() 之類的 API,但沒有提供任何 SSL 資訊,則應用程式會挑選程序的預設 SSLContext。在此情況下,會是以 Liberty 預設 SSL 配置建立的 SSLContext。
如果沒有在 Liberty 中設定預設 SSL 配置,Liberty 會使用 JSSE 的預設 SSLContext。JSSE 預設 SSLContext 會將 cacerts 檔用於金鑰儲存庫和信任儲存庫。如果沒有定義 SSL 特性,或者未將現有的 SSL 配置識別為預設值,則 Liberty 就沒有預設 SSL 配置。預設配置是稱為 defaultSSLConfig 的配置(如果定義 defaultKeyStore,這可以是隱含的),或是替代的 SSL 配置(可使用 sslDefault 元素來指定)。
javax 系統內容 javax.net.ssl.keystore 用來設定預設 SSL 環境定義的金鑰儲存庫和信任儲存庫資訊,且不得使用。如果在程序中設定這些內容,則呼叫 SSLContext.setDefault() 會除去它們。