Liberty 中的 SSL 預設值

指定 Liberty 中的預設 SSL 憑證、金鑰儲存庫和配置。

預設憑證和金鑰儲存庫

使用者可以在 securityUtility 指令中使用 createSSLCertificate 參數,來建立自簽憑證,這是有助於開發人員著手進行的簡便工具。使用者可以從指令行直接呼叫工具,或容許伺服器呼叫該工具,以便在伺服器啟動時建立預設憑證和金鑰儲存庫。

如果使用者在 server.xml 檔中有一個稱為 defaultKeyStore 的金鑰儲存庫元素,伺服器會建立預設金鑰儲存庫和憑證。例如:
<keyStore id="defaultKeyStore" password="yourPassword" />

如果已有 defaultKeyStore 的金鑰儲存庫配置,但在伺服器啟動時,金鑰儲存庫不存在,則伺服器會呼叫 createSSLCertificate 參數。這個參數會使用配置中指定的密碼來建立金鑰儲存庫。

預設金鑰儲存庫詳細資料:
  • 位置:金鑰儲存庫檔稱為 key.jks,並且位於伺服器或用戶端的 resources/security 目錄中。
  • 金鑰儲存庫類型:金鑰儲存庫類型是 JKS。
  • 密碼:配置中提供的密碼。
Liberty 建立的預設憑證的詳細資料:
  • 類型:憑證是自簽憑證。
  • 大小:預設憑證大小是 2048。
  • 簽章演算法:憑證的簽章演算法是 SHA256WITHRSA。
  • 有效性:憑證的有效期是 365 天。
  • SubjectDN:以 CN=<hostname>,OU=<client or server name>,O=ibm,C=US as the SubjectDN 來建立憑證。

如果使用者想自訂憑證,可在指令行中呼叫 createSSLCertificate 參數。

註: 如果使用群體控制器不切實際(可能是只有一或兩部 Liberty 伺服器),則可以使用自簽憑證,來限制能連接至 Liberty 成員伺服器的用戶端數目。建議在 Liberty 伺服器前端使用 IHS 伺服器,在此情況下,可以使用適當的 CA 簽章憑證連同 CN 白名單,來控制哪些用戶端可以連接至 IHS。對於 IHS 與 Liberty 成員伺服器之間的授信通道,可利用自簽憑證來維護。

預設 SSL 配置

SSL 最起碼所需的配置是一個稱為 defaultKeyStore 的單一金鑰儲存庫元素。當 defaultKeyStore 存在於配置中,執行時期會在其周圍建置一項稱為 defaultSSLConfig 的 SSL 配置。

defaultSSLConfig 詳細資料:

  • 通訊協定:當使用 IBM® JRE 時,依預設,會將通訊協定設為 SSL_TLSv2。如果使用 Oracle JRE,會以 SSL 作為通訊協定。
  • 密碼:會從基礎 JRE 取得支援的密碼清單,來建置密碼清單。依預設,清單會縮減成都是 128 位元(及以上)或 3DES 的密碼。會移除 RC4,因為啟用它們不被視為安全。會移除 ECDHE 密碼,因為如果您要前往的伺服器不支援這類密碼,可能會造成錯誤。您可以自訂密碼清單來包含它們。
  • 用戶端鑑別:依預設,會停用 clientAuthenticationclientAuthenticationSupported
  • 金鑰儲存庫:在預設配置中,defaultKeyStore 同時作為金鑰和信任儲存庫。

您可以在 server.xml 檔中輸入一個稱為 defaultSSLConfig 的 SSL 元素,來自訂 SSL 配置內容。只要未將不同的 SSL 配置識別為預設值,仍會將稱為 defaultSSLConfig 的自訂 ssl 元素視為預設 SSL 配置。如需相關資訊,請參閱 SSL 配置屬性

如果要在配置中指定不同的 ssl 元素作為預設 SSL 配置,使用者可以使用 sslDefault 元素來識別它。
<sslDefault sslRef="customSSLConfiguration" />

[17.0.0.1 以及更新版本](transportSecurity-1.0)(ssl-1.0) 都是安全處理行為。在修正套件 17.0.0.1 及更新版本中, transportSecurity-1.0 行為替代了 ssl-1.0 行為。請使用 transportSecurity-1.0 行為,來運用出埠連線的 SSL 選項。如果您的安全配置不包含出埠連線選項,則可繼續使用 ssl-1.0 行為。

(transportSecurity-1.0) 行為

當您啟用 transportSecurity-1.0 特性時,出埠 SSL 選項會變成可用。您可以在 sslDefault 元素上,使用 outboundSSLRef 屬性來設定一個出埠預設值,或是在 SSL 配置上設定 SSL 過濾器,以容許進行動態出埠連線。過濾器包含一個主機,或是由主機和埠組合而成。視出埠連線的主機和埠而定,出埠連線可與 SSL 配置相符。

當啟用 transportSecurity-1.0 特性時,SSL 執行時期程式碼不會設定 SSLContext 程序預設值。SSL 執行時期程式碼會使用 ssl.SocketFactory.provider Java™ 安全內容,來設定一個自訂 SSLSocketFactory 類別。SSLContext 程序預設值會是 SSLContext Java Secure Socket Extension (JSSE) 預設值, 亦即,使用 cacerts 檔來處理金鑰和信任。

程式會傳回 Liberty 自訂 SSL Socket Factory 給嘗試利用 javax.net.ssl.SSLSocketFactory.getDefault() 內容來取得 SSLSocketFactory 類別預設值的任何程式碼。自訂 SSLSocketFactory 類別可以解析出埠連線的適當 SSL 配置。

Liberty 提供的特性會使用 Liberty SSL 配置。不過,如果協力廠商 API 要發出出埠 SSL 呼叫,可能需要配置, 才能使用 Liberty 功能。當啟用 transportSecurity-1.0ssl-1.0 特性時,Liberty SSL 執行時期程式碼不會設定 SSLContext 程序預設值。如果協力廠商 API 需要使用預設 SSL 環境定義, 就不能從 Liberty SSL 配置獲益。當啟用 transportSecurity-1.0 特性時,Liberty SSL 執行時期程式碼會使用 ssl.SocketFactory.provider Java 安全內容,來設定自訂 SSLSocketFactory 類別。協力廠商 API 可藉由呼叫 javax.net.ssl.SSLSocketFactory.getDefault() 內容,就可以運用設有 SocketFactory 預設值的 Liberty SSL 配置而從中獲益。
註: Liberty 自訂 SSLSocketFactory 類別不會確認 Java 系統內容,例如 javax.net.ssl.keystore
(ssl-1.0) 行為

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() 會除去它們。

[17.0.0.1 以及更新版本]如果要使用 SSL 元素作為出埠 SSL 連線的預設值,您可以使用 sslDefault 元素的 outboundSSLRef 屬性。
<feature>transportSecurity-1.0</feature>
<sslDefault sslRef="mySSLConfig" outboundSSLRef="customSSLConfiguration" />
如果要指定預設出埠 SSL 元素,必須啟用 transportSecurity-1.0 特性。 指定 outboundSSLRef 時,出埠 SSL 連線會預設為使用該屬性所指定的 SSL 配置。 如果遺漏 transportSecurity-1.0 特性,則會忽略 outboundSSLRef。 如果未指定 outboundSSLRef 屬性,出埠呼叫會使用 sslRef 屬性所指定的值,或者,如果 sslRef 未參照 SSL 配置,則會使用 defaultSSLConfig 所指定的值。

指示主題類型的圖示 參照主題

檔名:rwlp_liberty_ssl_defaults.html