使用 Secure Sockets Layer (SSL) 進行安全通訊

Secure Sockets Layer (SSL) 通訊協定提供傳輸層安全 (包括確實性、資料簽署及資料加密) ,以確保使用 WebSphere® Application Server的用戶端與伺服器之間的安全連線。 SSL 的基礎技術是公開金鑰加密法,可確保當實體使用其公開金鑰來將資料加密時,只有具備相對應之私密金鑰的實體可以將該資料解密。

WebSphere Application Server 使用 Java™ Secure Sockets Extension (JSSE) 作為安全連線的 SSL 實作。 JSSE 是 Java 2 Standard Edition (J2SE) 規格的一部分,並且包含在 Java 執行時期延伸 (JRE) 的 IBM® 實作中。 JSSE 會處理 SSL 所提供的信號交換協議和保護功能,以確保安全連線功能存在於大部分通訊協定之間。 JSSE 根據 X.509 憑證型非對稱金鑰配對來提供安全連線保護和部分的資料加密。 金鑰組可有效加密階段作業型秘密金鑰,以將較大型的資料區塊加密。 SSL 實作會管理 X.509 憑證。

WebSphere Application Server 隨附 Java SE7。 依預設, Java SE 7 會啟用「伺服器名稱指示 (SNI)」。 SNI 是 TLS 通訊協定的延伸。 SNI 可讓用戶端指定它嘗試連接的主機名稱。 如果傳回的憑證不符合預期的主機名稱,則會擲出異常狀況。

在某些 Proxy 環境中,這會導致錯誤。 用戶端預期會接收 Proxy 的憑證,但會改為接收端點伺服器的憑證。

管理 X.509 憑證

WebSphere Application Server 的安全通訊需要數位簽署 X.509 憑證。 X.509 憑證的內容 (例如其識別名稱及有效期限) 是由憑證管理中心 (CA) 簽署、由 NodeDefaultRootStoreDmgrDefaultRootStore中的主要憑證簽署,或自簽。 當授信 CA 簽署 X.509 憑證時, WebSphere Application Server 會識別憑證並自由配送它。 憑證必須由 CA 簽署,因為憑證代表一般大眾的實體身分。 接受一般公用連線的伺服器端埠必須使用 CA 簽章憑證。 大部分用戶端或瀏覽器已具有可驗證 X.509 憑證的簽章者憑證,因此不需要進行簽章者交換,即可順利完成連線。

您只能在受控制環境中的同層級內 (例如內部網路通訊) 接受簽章者憑證,才能信任自簽 X.509 憑證的身分。 若要完成授信信號交換,您必須先將實體憑證副本傳送至連接至實體的每個同層級。

CA、鏈結及自簽 X.509 憑證位於 Java keystores中。 JSSE 提供憑證所在金鑰儲存庫的參照。 您可以從許多類型的金鑰儲存庫中選取,包括 Java Cryptographic Extension (JCE) 型和硬體型金鑰儲存庫。 一般而言,每一個 JSSE 配置都有兩個 Java 金鑰儲存庫參照: 金鑰儲存庫和 truststore。 金鑰儲存庫參照代表保留個人憑證的 Java 金鑰儲存庫物件。 信任儲存庫參照代表保留簽章者憑證的 Java 金鑰儲存庫物件。

沒有私密金鑰的個人憑證是 X.509 憑證,代表在信號交換期間擁有它的實體。 個人憑證同時包含公開和私密金鑰。 簽章者憑證是代表同層級實體或本身的 X.509 憑證。 簽章者憑證只包含公開金鑰,並驗證在對等式信號交換期間收到的身分簽章。

如需相關資訊,請參閱 將正確的 SSL 簽章者憑證新增至外掛程式金鑰儲存庫

如需金鑰儲存庫的相關資訊,請參閱 SSL 的金鑰儲存庫配置

交換簽章者

當您配置 SSL 連線時,可以交換簽章者,以在 personal certificate 中建立特定實體的信任。 簽章者交換可讓您從同層級金鑰儲存庫中擷取 X.509 憑證,並將它新增至另一個實體的信任儲存庫,以便兩個同層級實體可以連接。 簽章者憑證也可以源自 CA 作為主要簽章者憑證,或鏈結憑證的主要簽章者憑證或中繼簽章者憑證。 您也可以直接從自簽憑證 (即具有公開金鑰的 X.509 憑證) 擷取 signer certificate

圖 1 說明假設的金鑰儲存庫和信任儲存庫配置。 SSL 配置會決定哪些實體可以連接至其他實體,以及 SSL 信號交換所信任的同層級連線。 如果您沒有必要的簽章者憑證,信號交換會失敗,因為無法信任同層級。
圖 1. 交換簽章者
圖 1 說明假設的金鑰儲存庫和信任儲存庫配置。 SSL 配置會決定哪些實體可以連接至其他實體,以及 SSL 信號交換所信任的同層級連線。 如果您沒有必要的簽章者憑證,信號交換會失敗,因為無法信任同層級。

在此範例中,實體 A 的信任儲存庫包含三個簽章者。 只要三個簽章者之一驗證其個人憑證,實體 A 就可以連接至任何對等節點。 例如,「實體 A」可以連接至「實體 B」或「實體 C」,因為簽章者可以信任兩個已簽署的個人憑證。 Entity-B 的信任儲存庫包含一個簽章者。 實體 B 只能連接至實體 C ,且只有在對等節點端點使用憑證 Entity-C Cert 1 作為其身分時。 使用實體 C 的其他個人憑證的埠不受實體 B 信任。實體 C 只能連接至實體 A。

在此範例中,自簽配置似乎代表簽章者與憑證之間的一對一關係。 不過,當 CA 簽署憑證時,通常會一次簽署許多憑證。 使用單一 CA 簽章者的優點是它可以驗證 CA 所產生供對等節點使用的個人憑證。 不過,如果簽章者是公用 CA ,您必須注意可能已針對目標實體以外的其他公司產生已簽章的憑證。 對於內部通訊,專用 CA 和自簽憑證比公用 CA 更適合,因為它們可讓您隔離您想要發生的連線,並防止您不想要發生的連線。

SSL 配置

SSL 配置包含一組配置屬性,您可以在 WebSphere Application Server 拓蹼中與一個端點或一組端點相關聯。 SSL 配置可讓您建立 SSLContext 物件,這是伺服器用來取得 SSL Socket Factory 的基本 JSSE 物件。 您可以管理下列配置屬性:
  • SSLContext 物件的別名
  • 信號交換通訊協定版本
  • 金鑰儲存庫參照
  • 信任儲存庫參照
  • 金鑰管理程式
  • 一或多個信任管理程式
  • 密碼組合分組或特定密碼組合清單的安全層次選項
  • 用戶端和伺服器連線的憑證別名選項
如果要瞭解每一個 SSL 配置屬性的特性,請參閱 SSL 配置
附註: 依預設, WebSphere 不容許 HIGH 密碼清單中的 RC4 密碼組合,讓伺服器更安全。 在此變更之前,依預設可能會在 SSL 信號交換中使用 RC4 密碼。 移除 RC4 密碼之後,可能改用 AES 密碼。 使用更安全的 AES 密碼,使用者可能會遇到效能降低的情況。

選取 SSL 配置

在舊版 WebSphere Application Server中,您只能直接選取 SSL 配置別名來參照 SSL 配置。 每一個安全端點都以別名屬性來表示,別名屬性會參照 SSL 配置儲存庫內的有效 SSL 配置。 當您進行單一配置變更時,必須在各種處理程序之間重新配置許多別名參照。 雖然現行版本仍支援直接選取,但不再建議使用此方法。

現行版本提供改良的功能來管理 SSL 配置,並在您選取 SSL 配置時提供更大的彈性。 在此版本中,您可以從下列方法中選取:
程式化選取
您可以 在出埠連線之前,在執行中執行緒上設定 SSL 配置。 WebSphere Application Server 可確保大部分系統通訊協定 (包括「網際網路交互 ORB 通訊協定 (IIOP)」、「Java 訊息服務 (JMS)」、「超文字傳送通訊協定 (HTTP)」及「輕量型目錄存取通訊協定 (LDAP)」) 接受配置。
動態選擇
您可以使用預先定義的選取準則來 動態建立 SSL 配置與特定目標主機、埠或出埠通訊協定的關聯 。 當建立連線時, WebSphere Application Server 會檢查目標主機和埠是否符合包含主機網域部分的預先定義準則。 此外,您可以預先定義特定出埠 SSL 配置及憑證別名選項的通訊協定。

Secure Sockets Layer 配置的動態出埠選擇是根據伺服器可用的連線資訊,因此當在 com.ibm.websphere.ssl.protocol.SSLSocketFactory中建立用戶端 Socket 時,伺服器可以符合出埠通訊協定、主機或埠。 對於 WebSphere 管理連接器 (例如 SOAP 和「遠端方法呼叫 (RMI)」) ,連線資訊會放置在執行緒上,可供動態出埠選擇。 當擷取的 SSL 內容類似於 使用 JSSEHelper API 以程式設計方式指定出埠 SSL 配置中的說明時,動態出埠選擇程序會回覆正在設定的連線資訊。

從客戶撰寫的應用程式建立出埠連線時,部分連線資訊可能無法使用。 其中部分應用程式會對通訊協定進行 API 呼叫以建立連線。 API 最後會呼叫 com.ibm.websphere.ssl.protocol.SSLSocketFactory 中的其中一個 createSocket() 方法來完成程序。 動態出埠選擇的所有連線資訊可能無法使用,您可能必須調整動態出埠選擇連線過濾器,並針對連線資訊的遺漏部分填入星號 (*)。 例如, URL 物件上的 openConnection() 呼叫最終會呼叫 createSocket(java.net.Socket socket, String host, int port, boolean autoClose)。 連線資訊可以利用所提供的主機和埠來建置,但是卻沒有提供通訊協定。 在此情況下,應該將萬用字元星號 (*) 用於動態選擇連線資訊的通訊協定部分。

大部分 createSocket() 方法都採用主機或 IP 位址及埠作為參數。 可以使用主機和埠來建置動態出埠選擇連線過濾器。 不含任何參數的預設方法 createSocket() 不包含任何資訊來建置出埠選擇連線過濾器,除非 Socket Factory 已使用連線資訊實例化。如果沒有可用的連線資訊,則您應該考慮使用本主題中說明的其他選取 SSL 配置的方法之一,「程式化選擇」可能是很好的選擇。

避免麻煩: WebSphere Application Server 依賴傳給 WebSphere Application Server SSL Socket Factory 的主機、埠和通訊協定資訊。 配置設定或應用程式可以略過 WebSphere Application Server SSL Socket Factory ,亦即:
  1. java.security 檔案不包含 WebSphere Application Server Socket Factory 的規格。
  2. 應用程式會直接呼叫另一個 Socket Factory。
如果是 (1) 或 (2) ,則會略過動態 SSL 出埠選取程序,且不會建立連線。
直接選取
您可以使用特定別名來選取 SSL 配置,就像過去的版本一樣。 為了舊版相容性,會維護這個選取方法,因為許多應用程式和程序都依賴別名參照。
範圍選擇
您可以將 SSL 配置及其憑證別名 (位於與該 SSL 配置相關聯的金鑰儲存庫中) 與 WebSphere Application Server 管理範圍相關聯。 建議使用此方法來集中管理 SSL 配置。 您可以更有效率地管理端點,因為它們位於 Cell 的一個拓蹼視圖中。 範圍之間的繼承關係會減少您必須設定的 SSL 配置指派數目。
每次您建立 SSL 配置與 Cell 範圍的關聯時, Cell 內的節點範圍會自動繼承配置內容。 不過,當您指派 SSL 配置給節點時,節點配置會置換節點繼承自 Cell 的配置。 同樣地,除非您置換這些指派,否則節點的所有應用程式伺服器都會自動繼承該節點的 SSL 配置。 除非您置換特定的配置,否則拓蹼會根據每一個應用程式伺服器從 Cell 層次向下到端點層次的繼承規則。
附註: 如果您的應用程式依賴的 SSL 配置已設定為拓蹼中每一個 SSL 配置的個別設定,但您的應用程式伺服器已繼承從 Cell 層次向下部署至端點層次的 SSL 配置,則伺服器之間可能會發生通訊錯誤 (例如,信號交換錯誤)。 您需要確保應用程式的運作與 SSL 配置的中央管理一致。
拓蹼視圖會顯示入埠樹狀結構及出埠樹狀結構。 您可以根據伺服器作為出埠連線所連接的項目,以及伺服器作為入埠連線所連接的項目,對 SSL 連線的每一端進行不同的 SSL 配置選擇。 如需相關資訊,請參閱 SSL 配置的中央管理
執行時期會使用優先順序來決定要選擇的 SSL 配置,因為您有許多方法可以選取 SSL 配置。 當您選取配置方法時,請考量下列優先順序:
  1. 程式化選取。 如果應用程式使用 com.ibm.websphere.ssl.JSSEHelper 應用程式設計介面 (API) 在執行中的執行緒上設定 SSL 配置,則保證最高優先順序是 SSL 配置。
  2. 出埠主機及埠或通訊協定的動態選取準則。
  3. 直接選擇。
  4. 範圍選擇。 範圍繼承可保證您選取的端點與 SSL 配置相關聯,且由其下的每一個範圍所繼承,且不會置換此選項。

預設鏈結憑證配置

依預設, WebSphere Application Server 會為每一個節點建立唯一鏈結憑證。 鏈結憑證是以主要憑證 (儲存在 DmgrDefaultRootStoreNodeDefaultRootStore中的自簽憑證) 來簽署。 WebSphere Application Server 不再依賴自簽憑證或產品隨附的預設或虛擬憑證。 key.p12 預設金鑰儲存庫和 trust.p12 信任儲存庫儲存在節點目錄內的配置儲存庫中。 預設主要憑證儲存在節點目錄下配置儲存庫的 root-key.p12 中。

當您聯合基本應用程式伺服器時,會發生下列狀況: 包含金鑰儲存庫和信任儲存庫,且簽章者憑證會新增至部署管理程式共用信任儲存庫,位於配置儲存庫的 Cell 目錄中。

所有節點都會將其來自預設主要憑證的簽章者憑證放置在此一般信任儲存庫 (trust.p12) 中。 此外,在聯合節點之後,會自動修改預設 SSL 配置,以指向位於 Cell 目錄中的一般信任儲存庫。 節點現在可以與 Cell 中的所有其他伺服器進行通訊。

所有預設 SSL 配置都包含名稱字尾為 DefaultKeyStore 的金鑰儲存庫、名稱字尾為 DefaultTrustStore 的信任儲存庫,以及名稱字尾為 DefaultRootStore 的根儲存庫。 這些預設字尾指示 WebSphere Application Server 執行時期將個人憑證的主要簽章者新增至一般信任儲存庫。 如果信任儲存庫名稱未以 DefaultKeyStore 結尾,當您聯合伺服器時,金鑰儲存庫主要簽章者憑證不會新增至一般信任儲存庫。 您可以變更預設 SSL 配置,但必須確定已針對管理連線等建立正確的信任。

如需相關資訊,請參閱 SSL 中的預設鏈結憑證配置 [AIX Solaris HP-UX Linux Windows]SSL 中的 Web 伺服器外掛程式預設配置

憑證有效期限監視

憑證監視可確保每一個節點的預設鏈結憑證不會到期。 憑證有效期限監視功能會在憑證及簽章者設為到期之前發出警告。 可以監視位於 WebSphere Application Server 配置所管理之金鑰儲存庫中的那些憑證和簽章者。 您可以將到期監視器配置成自動取代憑證。 會根據起始建立所用的相同資料來重建鏈結憑證,並使用簽署原始憑證的相同主要憑證來簽署它。 也會根據起始建立所用的相同資料來重建自簽憑證或鏈結憑證。

監視器也可以自動將舊簽章者取代為 WebSphere Application Server所管理之金鑰儲存庫中的新鏈結憑證或自簽憑證中的簽章者。 會保留執行時期在聯合期間及管理期間所進行的現有簽章者交換。 如需相關資訊,請參閱 SSL 中的憑證有效期限監視

有效期限監視器會配置成取代 DmgrDefaultRootStore 或 NodeDefaultRootStore中主要憑證所簽署的鏈結個人憑證。 使用用來簽署原始憑證的相同主要憑證來更新憑證。

監視器也可以自動將舊簽章者取代為 WebSphere Application Server所管理金鑰儲存庫中新自簽憑證的簽章者。 會保留執行時期在聯合期間及管理期間所進行的現有簽章者交換。 如需相關資訊,請參閱 SSL 中的憑證有效期限監視
重要事項: 對於過期憑證鏈或過期憑證管理中心 (CA) 憑證鏈,您需要更新 整個 鏈。 您必須產生具有個別簽章者憑證的新憑證鏈。 對於 CA 憑證鏈,這可能需要匯入新的憑證鏈,通常是透過新的憑證申請檔案 (CSR)。

WebSphere Application Server 用戶端: 簽章者交換需求

在每一個節點起始啟動期間,會為其產生新的鏈結憑證。 為了確保信任,必須為用戶端提供主要簽章者,以建立連線。 在現行版本中引進鏈結憑證會使此處理程序更簡單。 您可以不交換短期自簽憑證的簽章者,而是交換長期的主要簽章者,這將容許在個人憑證更新之間保留信任。 此外,您也可以存取用戶端必須使用下列任何一個選項來連接之各種節點的簽章者憑證 (如需相關資訊,請參閱 SSL 中用戶端簽章者擷取的安全安裝):
  • 簽章者交換提示可讓您匯入在伺服器連線期間尚未存在於信任儲存庫中的簽章者憑證。 依預設,會針對管理連線啟用此提示,並且可以針對任何用戶端 SSL 配置啟用此提示。 啟用此提示時,與尚未呈現簽章者的伺服器建立的任何連線,都會提供伺服器的簽章者,以及憑證資訊和憑證的「安全雜湊演算法 (SHA)」摘要以進行驗證。 使用者可以選擇是否接受這些認證。 如果接受認證,簽章者會新增至用戶端的信任儲存庫,直到明確移除簽章者為止。 除非個人憑證變更,否則在連接至相同伺服器時,不會再次出現簽章者交換提示。
    注意: 信任簽章者交換提示而不驗證 SHA 摘要是不安全的。 當憑證不受信任時,未驗證的提示可以從瀏覽器產生。
  • 在建立伺服器連線之前,您可以從用戶端執行 retrieveSigners 管理 Script。 若要下載簽章者,不需要管理權限。 若要上傳簽章者,您必須具有管理者角色權限。 Script 會將所有簽章者從指定的伺服器信任儲存庫下載至指定的用戶端信任儲存庫,並且可以呼叫以僅從信任儲存庫下載特定別名。 您也可以呼叫 Script ,將簽章者上傳至伺服器信任儲存庫。 當您選取 CellDefaultTrustStore 信任儲存庫作為 Cell 的指定伺服器信任儲存庫及一般信任儲存庫時,該 Cell 的所有簽章者都會下載至指定的用戶端信任儲存庫,通常是 ClientDefaultTrustStore。 如需相關資訊,請參閱 retrieveSigners 指令
  • 您可以將 trust.p12 一般信任儲存庫 (位於配置儲存庫的 Cell 目錄中) 實際配送給用戶端。 不過,在執行此配送時,您必須確定已在 ssl.client.props 用戶端 SSL 配置檔中指定正確的密碼。 此信任儲存庫的預設密碼為 WebAS。 在配送之前變更預設密碼。 實體分佈不如先前的選項有效。 對伺服器上的個人憑證進行變更時,自動交換可能會失敗。

動態 SSL 配置變更

WebSphere Application Server 的 SSL 執行時期會維護大部分 SSL 連線的接聽器。 SSL 配置的變更會導致入埠連線接聽器建立新的 SSLContext 物件。 現有的連線會繼續使用現行 SSLContext 物件。 嘗試出埠連線時,會自動使用新的配置內容。

在離峰時段對 SSL 配置進行動態變更,以減少計時相關問題的可能性,並防止伺服器重新啟動的可能性。 如果您啟用執行時期來接受動態變更,請變更 SSL 配置並儲存 security.xml 檔。 當新的 security.xml 檔案到達每一個節點時,您所做的變更即會生效。

附註: 如果配置變更導致 SSL 信號交換失敗,也可能發生管理連線功能失敗,這可能導致中斷。 在此情況下,您必須重新配置 SSL 連線,然後執行手動節點同步化以更正問題。 您必須小心完成任何動態變更。 強烈建議您在對正式作業系統進行相同的變更之前,先在測試環境上執行 SSL 配置的變更。

內建憑證管理

與 iKeyMan 功能相當的憑證管理現在已整合到管理主控台的金鑰儲存庫管理畫面中。 使用內建憑證管理來管理金鑰儲存庫中的個人憑證、憑證申請及簽章者憑證。 此外,您還可以遠端管理金鑰儲存庫。 例如,您可以從部署管理程式管理位於任何節點上配置儲存庫外部的檔案型金鑰儲存庫。 您也可以從部署管理程式遠端管理硬體加密金鑰儲存庫。

使用內建憑證管理,您可以將鏈結或自簽憑證取代為分散在許多信任儲存庫中的所有簽章者憑證,並透過連接至遠端 SSL 主機及埠,並在信號交換期間截取簽章者,從遠端埠擷取簽章者。 首先會根據憑證 SHA 摘要來驗證憑證,然後管理者必須先接受已驗證的憑證,才能將它放入信任儲存庫中。

當您提出憑證申請時,可以將它傳送至憑證管理中心 (CA)。 當傳回憑證時,您可以在管理主控台內接受它。
提示: 雖然 iKeyMan 功能仍隨附於 WebSphere Application Server,但請從管理主控台使用內建憑證管理功能來配置金鑰儲存庫。 當使用管理主控台不方便時, iKeyMan 仍然是一個選項。 如需相關資訊,請參閱 使用 SSL 之前的 iKeyman 進行憑證管理

AdminTask 配置管理

管理主控台中的 SSL 配置管理畫面主要依賴管理作業,這些管理作業已維護及加強,可支援管理主控台功能。 您可以從 Java 主控台提示中使用 wsadmin 指令,以自動化金鑰儲存庫、SSL 配置、憑證等的管理。